Проблемы связывания с DLL - PullRequest
       59

Проблемы связывания с DLL

0 голосов
/ 25 сентября 2019

Я пытаюсь использовать стороннюю DLL (я компилирую с использованием MinGW), но у меня возникают некоторые проблемы.Прежде всего, DLL экспортирует недекорированные имена, но объявление функций, видимых в заголовочных файлах, содержит «__stdcall».Кроме того, я использую C ++, но я выделил включение с помощью 'extern "C"'.

Ошибка:

неопределенная ссылка на `Play_Stop @ 4 '

Я пытался связать напрямую с DLL, так как G ++ теоретическиспособен сделать это, но у меня есть некоторые "неопределенные ссылки".

Затем я попытался сгенерировать файл .def, используя gendef (gendef theirDLL.dll), а позже я использовал dlltool для создания библиотеки импорта: dlltool -k --no-leading-underscore -d theirDLL.def -D theirDLL.dll -l theirDLL.a.Обратите внимание, что я использовал --no-leading-underscore, как я заметил с nm, что всем функциям предшествовало одно подчеркивание, что вызывало проблемы.

Однако, даже делая все это, я не могу связать его должным образом.Есть идеи?

Я проверил, что компоновщик находит статическую библиотеку.

Объявление функции в заголовочном файле:

BOOL __stdcall Play_Stop(LONG nPort);

Директива include:

extern "C"{
#include "PlaySDK.h"
}

Вывод команды nm (themDLL.a)

...
daazs00103.o:
00000000 b .bss
00000000 d .data
00000000 i .idata$4
00000000 i .idata$5
00000000 i .idata$6
00000000 i .idata$7
00000000 t .text
00000000 T Play_Stop@4
00000000 I __imp_Play_Stop@4
...

И ошибка:

неопределенная ссылка на `Play_Stop @ 4 '

Заранее спасибо!

...