未解析的外部符号 - 来自C ++ DLL的LNK2019

时间:2011-11-16 16:24:55

标签: c++ dll calling-convention unresolved-external

我将带有GetProcAddress的C ++ dll中的GetInstance函数加载到我的基本代码并获取 一些未解决的外部符号错误:

  

错误 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(unsigned)中引用   char,unsigned int,unsigned int)“(?SetUserDescriptor @@ YAHEII @ Z)

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 个答案:

答案 0 :(得分:1)

错误信息不易阅读,但不言自明。函数CTestmode_Sle70::SetMSfr中引用了函数SetUserDescriptor,但它没有在任何地方定义。链接器无法绑定对SetMSfr的调用,因为该函数不存在。

答案 1 :(得分:0)

您错过了SetMSfr(unsigned int,unsigned short,char *);

的实施方案