问题来由:
代码库有两个版本,其中一个代码库里的某个功能想用第二个代码库里相同的功能,由于项目需要直接用第二个版本的 dll。由于第二个版本代码库的dll在vs编译设置方面与第一个版本的有所不同,导致导出的函数名不一致。不同点在对TCHAR的设置上,“配置属性->C++->语言” 的“将wchar_t配置成内置类型“,第一个设置为no ,第二个设置了yes。
两者导出的函数名有何不同?
差别在于:
导入方:basic_string@G 也就是basic_string
导出房:basic_string@_W 也就是basic_string 。此处的wchar_t是内置类型。
所以wchar_t统一成内置类型或统一成非内置类型。
Reference:导出的函数无法导入
这个问题耗费了大半天,通过dependence工具将dll函数导出查看函数名,跟报错的函数名一一比对才发现@g与@w的区别。
dll函数接口中含有TCHAR参数,在导出函数名时需要注意。