问题背景:
我在用MFC写的一个单文档的程序调用以MFC通过.def模块导出的DLL时出现了如下错误
error LNK2001: 无法解析的外部符号 "unsigned short __cdecl SearchCtrl(struct tagPARAMS &,short)" (?SearchCtrl@@YAGAAUtagPARAMS@@F@Z)
1>E:\Test\TestMFCA\Debug\TestMFCA.exe : fatal error LNK1120: 1 个无法解析的外部命令
解决过程:
上面是两个连接错误,看了网上的很多解决方法一直没有解决,这个DLL是我在别人的基础之上增加了一些功能,调用约定设置我也并不清楚,然后自己又写了一个简单的模块导出的MFC_DLL 直接通过了。。
之后我检查了一下调用出错的DLL配置(项目-》配置属性-》高级-》调用约定)是stdcall ,,从错误报告上也看不出有和调用约定密切相关的提示。。。
解决方法:
MFC的程序默认(vs2010)调用方式为:__cdecl (/Gd)
MFC.def默认导出的DLL的调用方式也是 __cdecl
我的出问题的DLL是stdcall
那么把DLL或应用程序的调用方式配置一致就可以了