关于VC 6.0 和 VC 2008 中CString不兼容的问题
我公司原来用VC 6.0开发了一个MFC扩展dll,该dll导出了一个接口函数 void function(CString& str),在该函数中将改变str变量的值;另外又开发了一个MFC的exe程序来调用这个dll并访问这个接口。现在使用VC 2008重新编译了exe程序之后,发现调用接口函数时,在给str变量赋值时会出现异常。请问这真的是VC 6.0 和 VC 2008的CString不兼容造成的吗?又该如何解决呢?而且鉴于目前现有模块的应
,想将VC 6.0开发的dll再重新修改、编译是不实际的。
// 在dll中导出的接口函数,dll程序使用 VC 6.0 编译
__declspec(dllexport) void function(CString& str)
{
str = "aaa";
}
// 在exe中调用dll中导出的接口函数,exe程序使用 VC 2008编译
typedef void (CALLBACK* LPFNDLLFUNC)(CString& str);
void call_dll_function()
{
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC lpfnDllFunc; // Function pointer
CString str;
hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
lpfnDllFunc = (LPFNDLLFUNC)GetProcAddress(hDLL,"function");
if (!lpfnDllFunc)
{
FreeLibrary(hDLL);
return;
}
else
{
// 调用接口函数,进入dll接口函数后,会出现异常
lpfnDllFunc(str);
}
}
}