主exe加载dll。从dll调用函数返回简单的boost :: any。如果在析构函数中FreeLibrary应用程序崩溃后删除了boost :: any。没关系。但是我无法理解为什么这个代码也会在r2析构函数中崩溃,在main和delete中创建的r2不需要dll代码。 如何在FreeLibrary之后保存boost :: any。 尝试没有外部“C” - 同样的效果。
控制台代码:
int _tmain(int argc, _TCHAR* argv[])
{
any r2;
HMODULE hmod = LoadLibrary(L"dll");
typedef any (*dllfunc)(int,int,int);
dllfunc func = (dllfunc) GetProcAddress(hmod,"Export1");
{
any r = func(1,2,3);
r2 = r;
}
FreeLibrary(hmod);
return 0;
}
Dll代码:
extern "C"
{
DLL_API any Export1(int a,int b, int c)
{
return a+b+c;
}
}
编译器Visual Studio 2005
答案 0 :(得分:1)
这取决于实际any
的内容。例如,对于具有析构函数的某个对象,它可能是shared_ptr
,而析构函数代码驻留在DLL中。然后,在DLL卸载之前,应该销毁any
的所有实例。
答案 1 :(得分:0)
我遇到了一个内存管理器没有处理空指针的问题。