Неразрешенный внешний символ - LNK2019 из C ++ dll - PullRequest
1 голос
/ 16 ноября 2011

Я загружаю функцию GetInstance из DLL C ++ с GetProcAddress в свой базовый код и получаю некоторые неразрешенные ошибки внешних символов:

ошибка LNK2019 : неразрешенный внешний символ "_ declspec (dllimport) public: unsigned int _thiscall RegTestAPI :: CTestmode_Sle70 :: SetMSfr (unsigned int, unsigned short, char *) "(_ imp ? SetMSfr @ CTestmode_Sle70 @ RegTestAPI @@ QAEIIGPAD @ Z) ссылка на функцию" int __ cdecl SetUserDescriptor (без знака) char, unsigned int, unsigned int) "(? SetUserDescriptor @@ YAHEII @ Z) * ​​1014 *

Код DLL

заголовок

extern "C" _declspec(dllexport) CTestmode* GetInstance();

источник

CTestmode *cTestmode;

extern "C" _declspec(dllexport) CTestmode* GetInstance()
{
    cTestmode = CTestmode::Instance();

    return cTestmode;
}

...

// in header
static CTestmode* Instance();
... 
static CTestmode* m_pInstance;

// in source
CTestmode* CTestmode::Instance()
{
    if(m_pInstance == NULL)
    {   
        m_pInstance = new CTestmode();
    }

    return m_pInstance;
}

Код инструмента

typedef CTestmode* (*CTestModeInstance)(void);

CTestmode *pMyTM;

...

HMODULE handleTestmode;
handleTestmode = LoadLibrary("Testmode.dll");

CTestModeInstance cTestModeInstance = (CTestModeInstance)GetProcAddress(handleTestmode, "GetInstance");

pMyTM = (cTestModeInstance)();

Моя идея заключается в том, что что-то с соглашениями о вызовах неверно (посмотрите на сообщение об ошибке -> __thiscall и __cdecl Подсказка: оба проекта установлены на __cdecl (/ Gd))?!

Есть идеи, почему это не сработает?

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

приветствует

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

Сообщение об ошибке не легко прочитать, но оно не требует пояснений. Функция CTestmode_Sle70::SetMSfr упоминается в функции SetUserDescriptor, но она нигде не определена. Линкер не может связать вызов с SetMSfr, потому что функция не существует.

0 голосов
/ 16 ноября 2011

Вам не хватает реализации для SetMSfr(unsigned int,unsigned short,char *);

...