ATL::CString在dll中使用问题
dll export function
_____________________________________
ATL::CString s = "test string";
extern "C" STRALLOC_API ATL::CString& fnstrAlloc(void)
{
return s;
}
exe main
_____________________________________
typedef ATL::CString & (*fnstrAlloc_t)(void);
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE h = LoadLibrary("d:\\testxx\\debug\\TestXX.dll");
fnstrAlloc_t fnstrAlloc = (fnstrAlloc_t)GetProcAddress(h,"fnstrAlloc");
ATL::CString s = fnstrAlloc();
FreeLibrary(h);
s.Mid(2);
return 0;
}
以上代码在运行到s.mid(2)的时候会崩溃,崩溃原因是ATL::String的(IAtlStringMgr*)(&g_strmgr)无效了,这个g_strmgr是每个dll一个的么?以上代码在MFC下运行没有问题,虽然MFC使用的相同的CString代码,看上去MFC在所有dll里面使用了一个统一的g_strmgr,ATL里面有类似机制么?