Экспортируйте классы и функции DLL и импортируйте их в приложение Win32 - PullRequest
1 голос
/ 13 февраля 2011

У меня есть DLL с классом, который определяет некоторые методы и переменные внутри него. Я отметил это как

__declspec(dllexport)

и я импортировал заголовок .h в проект приложения win32 в том же решении. Я могу использовать функции, но когда я пытаюсь скомпилировать проект, у меня появляется много ошибок о том, что внешние символы не разрешены. Почему?

Ответы [ 2 ]

2 голосов
/ 13 февраля 2011

Пожалуйста, прочитайте о стандартном способе использования макросов для этой очень распространенной задачи здесь: http://wiki.tcl.tk/8721

Основная идея состоит в том, что вы определяете макрос, скажем MY_API, например, так:

    #ifdef BUILD_MYAPI
    #    define MY_API __declspec(dllexport)
    #else
    #    define MY_API __declspec(dllimport)
    #endif

Когда вы объявляете функцию или класс в заголовочном файле, вы делаете это:

void MY_API myApiFunction(int x);

Когда вы создаете свою собственную dll, которая объявляет тело функции, вы добавляете определение BUILD_MYAPI для сборки.Это делает все замедления dllexport
, когда вы включаете заголовок из некоторой другой библиотеки DLL, которую вы не добавляете BUILD_MYAPI, поэтому замедления составляют dllimport
При компиляции с Visual Studio вы можете добавить макросопределение к компиляции без изменения источника из свойств проекта -> C / C ++ -> Preprocesson -> Определения препроцессора

2 голосов
/ 13 февраля 2011

Для приложения, в котором вы хотите импортировать этот класс, вам нужно будет пометить класс как

__declspec(dllimport)

Вместо dllexport.

Вы также должны убедиться, что связаны с библиотекой импорта DLL (файл .lib).

...