extern “C” __declspec(dllexport) int _stdcall fun(int x);
编译为64位dll时,暴漏的方法接口为原样,也就是C规范的 fun;
但是在编译为32位dll时,暴漏的方法接口 为_stdcall 的规定,_fun@4; 4 为参数的字节数。(depends查看)
用隐式链接dll,两者调用都没有问题;
但是显式链接时,64位无问题GetProcAddress(hDll,”fun”);
32位就有问题了,除非用 _fun@4 这种遵循规定的方法。
GetProcAddress(hDll,”_fun@4”);
所以还是改为:
extern “C” __declspec(dllexport) int _cdecl fun(int x);
或
extern “C” __declspec(dllexport) int fun(int x); (默认就是_cdecl )
另外,调用规定不一致会导致:Run-Time check Failure #0 错误。