Пытаюсь создать простенькое приложение на COM, всё сделал по учебнику.
Программирую в Netbeans с помощью MinGW. И клиент, и собственно сервер(dll) отлично компилятся. После неких мук с __stdcall, __cdecl и .def файлами удалось даже зарегестрировать dll в реестре. Собирал тот же код в VS2008, всё тоже компилится, регестрируется и даже корректно работает.
Сначала проверил дамп экспортируемых функций с помощью objdump — всё ок. Потом с помощью инструмента gendef автоматически генерировал .def файл для созданной dll. Вышло вот такое:
LIBRARY "libCOMdll2.dll"
EXPORTS
CLSID_Component2 DATA
DllCanUnloadNow
DllGetClassObject@8
DllMain@12
DllRegisterServer
DllUnregisterServer
Сначала думал что проблема в постфиксах,
"@"
причём один из них стоит после имени DllMain, откуда dll начинает свою работу. После генерации .def файла с другой dll, сделанной в VS, получил точно такой же результат — но ведь всё работает!
В VS в настройках проэкта увидел что в настройках calling convention стоит __cdecl, но всё равно функции используют свои вызовы.
Подскажите, пожалуйста, как корректно скомпилировать dll в MinGW. Буду рад помощи.