Функции в DLL

0

У меня есть dll с некоторыми функциями. Заголовок примера:

__declspec(dllexport) bool Test()

; И у меня есть еще одно простое приложение для использования этой функции:

typedef bool(CALLBACK* LPFNDLLFUNC1)();

HINSTANCE hDLL;               // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1;    // Function pointer
bool uReturnVal;

hDLL = LoadLibrary(L"NAME.dll");
if (hDLL != NULL)
{
    lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,"Test");
    if (!lpfnDllFunc1)
    {
        // handle the error
        FreeLibrary(hDLL);
        cout << "error";
    }
    else
    {
        // call the function
        uReturnVal = lpfnDllFunc1();
    }
}

Но не работайте. Функция не найдена.

  • 1
    что это значит? загружена ли dll и найдена ли функция? lpfnDllFunc1 не равен нулю?
  • 0
    Публикация некоторых ваших выводов была бы полезна здесь ... мы не имеем понятия, была ли вообще найдена ваша DLL или есть ли другая проблема с попыткой ее загрузки.
Показать ещё 1 комментарий
Теги:
dll

1 ответ

0
Лучший ответ

Мои психические чувства говорят мне, что функция не была найдена, потому что вы забыли объявить ее как extern "C".

Из-за изменения имени в C++ фактическое имя функции, которое попадает в таблицу экспорта DLL, является более длинной и более строгой строкой, чем просто Test если функция имеет связь C++. Если вы объявите его с помощью C-ссылки, он будет экспортироваться с ожидаемым именем и, следовательно, может быть импортирован более легко.

Например:

// Header file
#ifdef __cplusplus
// Declare all following functions with C linkage
extern "C"
{
#endif

__declspec(dllexport) bool Test();

#ifdef __cplusplus
}
// End C linkage
#endif

// DLL source file
extern "C"
{

__declspec(dllexport) bool Test()
{
    // Function body
    ...
}

}  // End C linkage
  • 0
    Спасибо, что решили мою проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню