我是MFC的新手。
我正在尝试在MFC中创建一个DLL,它链接到另一个DLL。
问题是当我尝试编译时,我得到一个LNK2019错误,因为我正在尝试链接的DLL中存在一个函数。
LNK2019是指未找到DLL或DLL内部的函数。
我已经采取了所有步骤,DLL被放置在一个已知的位置,lib也被放置在一个已知位置,它已被添加到其他依赖项中,所有正确的开关都已应用(我知道的任何方式)
我已经使用了Dependency walker,我知道我试图链接的DLL暴露了这个函数。 我还有其他使用该函数的例子,我正在尝试使用它。 .lib和.dll是一致的,即它们彼此一致。
但仍然存在错误。
修改 的 这是错误消息:
错误2错误LNK2019:未解析的外部符号 “__declspec(dllimport)public:bool __thiscall PwServer :: Connect(wchar_t const *,unsigned long,unsigned long *)“ (_ imp ?Connect @ PwServer @@ QAE_NPB_WKPAK @ Z)在函数中引用 “public:bool __thiscall CPwServer :: Connect(class ATL :: CStringT> &gt ;, unsigned long,unsigned long *)“ (?连接@ CPwServer @@ QAE_NV?$ CStringT @ _WV?$ StrTraitMFC_DLL @ _WV?$ ChTraitsCRT @ _W @ ATL @@@@@ ATL @@ KPAK @ Z)
这是我用来访问DLL的调用。
bool conn = PwSrv->Connect(_T(""));
Dumpbin函数导出:
25BE6 ?Connect@PwServer@@QAE_NPBGKPAK@Z 25BE6 __imp_?Connect@PwServer@@QAE_NPBGKPAK@Z
在将MFC DLL与常规DLL连接时,还有其他需要用餐的地方,比如添加AFX_EXT_或其他东西吗?
请在此提出建议。 谢谢。
更新
似乎所需要的只是切换项目属性>> C / C ++>>语言>>将wchar_t作为内置类型设置为NO时设置的标志。我以前从未打过过国旗,所以不知道。 Linker错误就在那里......
行。现在我还有另一个问题。 wchar_t的切换解决了DLL与另一个MFC DLL链接的问题,但现在我的应用程序找不到我的DLL中的入口点。在依赖walker中,它显示了应用程序发送的CString与我的DLL正在接受的Unsigned Short ...之间的不匹配(由于wchar_t
关闭,大概是)
答案 0 :(得分:0)
假设您正确包含了DLL的.lib文件(大多数情况下这归结于编译器设置的差异。例如UNICODE设置)。
即
dumpbin /ALL mylib.lib > exports.txt
如果名称装饰稍有不同,那么就会给你一个关于问题的线索。