C++ 导出未修饰的函数名
我在这里读了好几篇关于名字弄乱/装饰的文章,一直遇到不一致的地方,所以我想我应该问一个非常集中的问题,看看会发生什么 <>我试图通过学习曲线来最终在VS2013中创建一个DLL,它可以在一个非常老的Borland C++编译器上生成代码。第一步是在VS2013中构建一个可以“对话”的exe和dll。我想要未修饰的函数名。因此,我创建了一个带有一个导出函数的dllC++ 导出未修饰的函数名,c++,visual-studio,dll,dllexport,name-decoration,C++,Visual Studio,Dll,Dllexport,Name Decoration,我在这里读了好几篇关于名字弄乱/装饰的文章,一直遇到不一致的地方,所以我想我应该问一个非常集中的问题,看看会发生什么 我试图通过学习曲线来最终在VS2013中创建一个DLL,它可以在一个非常老的Borland C++编译器上生成代码。第一步是在VS2013中构建一个可以“对话”的exe和dll。我想要未修饰的函数名。因此,我创建了一个带有一个导出函数的dll extern "C" __declspec(dllexport) int __cdecl BasicFileOpen(void); 我有
extern "C" __declspec(dllexport) int __cdecl BasicFileOpen(void);
我有限的理解是:
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提到了\u BasicFileOpen。
我对此感到困惑。
我已经正确地指出了dll构建生成的lib文件。
我在exe中包含dll函数的头文件。
为什么链接器不理解导出函数的名称?
为什么它认为函数名是修饰的?
顺便说一句,使用.def文件似乎没有任何区别
如有任何意见,我们将不胜感激
MBBextern“C”
C语言绑定,因此C默认为所有内容<代码>\uuuCDECL将调用转换更改为\uuCDECL
外部“C”
并不表示“无装饰”。它表示“使用C装饰”。如果不需要装饰,请使用DEF文件。