0

主 exe 加载 dll。从返回简单 boost::any 的 dll 调用函数。如果在 FreeLibrary 应用程序在析构函数处崩溃后删除了 boost::any。没关系。但我不明白为什么这段代码也会在 r2 析构函数中崩溃,在 main 和 delete 中创建的 r2 不需要 dll 代码。如何在 FreeLibrary 之后保存 boost::any。尝试不使用 extern "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

4

2 回答 2

1

这取决于实际any情况。例如,它可能是一个shared_ptr带有析构函数的对象,而析构函数代码驻留在 DLL 中。然后所有的实例都any应该在 DLL 卸载之前被销毁。

于 2012-02-06T13:15:25.043 回答
0

我对不处理空指针的内存管理器有同样的问题。

于 2013-02-18T22:13:28.077 回答