出现这个问题的原因是导出函数的实际返回值类型和GetProcAddress获得函数指针时定义的函数指针的函数返回值类型不一致导致。
如:导出函数为
extern "C" bool LICENSE_CLASS _stdcall isLicensed(char* licensefile);
使用时却为
typedef string(*func_isLicensed)(char* );
HANDLE g_hinst = LoadLibrary("xxxx.dll");
pfFunc_isLicensed = (func_isLicensed)GetProcAddress(g_hinst, "isLicensed");
若调试,进入isLicensed前和进入isLicensed后指针licensefile的值会变,导致程序运行出错。