我已经在这里阅读了几篇关于名称修改/装饰的文章,并且一直遇到不一致的问题,所以我想我会问一个非常有针对性的问题,看看会发生什么。
我正努力在学习曲线上努力,最终能够在VS2013中创建一个dll,可以在非常古老的Borland C ++编译器上生成代码。第一步是在VS2013中构建一个可以" talk"的exe和dll。我想要未修饰的函数名称。所以我用一个导出的函数创建了一个dll。
extern "C" __declspec(dllexport) int __cdecl BasicFileOpen(void);
我的理解有限:
当我使用DependencyWalker或Dumpbin / EXPORTS检查dll时,函数名称未修饰。耶。
以下是exe中试图调用dll中导出函数的代码:
void CCallsCIDdllDlg::OnBnClickedOk()
{
int iRetVal = BasicFileOpen();
// TODO: Add your control notification handler code here
CDialogEx::OnOK();
}
但是,当我尝试构建exe时,我收到链接器错误。
error LNK2019: unresolved external symbol _BasicFileOpen referenced in function
"public: void __thiscall CCallsCIDdllDlg::OnBnClickedOk(void)"
(?OnBnClickedOk@CCallsCIDdllDlg@@QAEXXZ)
请注意,exe提及 _BasicFileOpen 。 我很困惑。 我已正确指出dll构建生成的lib文件。 我在exe中包含了dll函数的头文件。 为什么链接器不了解导出函数的名称? 为什么它认为函数名称是装饰的? BTW使用.def文件似乎没有任何区别。
感谢任何评论。
MBB