dllexported附加字符串已损坏

时间:2011-04-20 16:54:53

标签: c++ string debugging dllimport dllexport

我有一个exe加载一个DLL。我写了两篇。

我正在运行一个函数foo,它返回一个std :: wstring。

它只是说

std :: wstring blah = L“rgjwgfw”;

  return blah.append(L"hey");

在我导入foo的exe中,字符串已损坏。一旦我从我调用foo的函数返回,我就会失败断言。有时我得到一条消息,说Windows已经在foo.exe中触发了一个断点。这可能是由于堆等的损坏......这也可能是由于用户在foo.exe有焦点时按f12。等....

知道为什么会这样吗?如果我从foo中删除追加行并且jsut返回原始字符串,则不会发生这种情况。没有问题。

感谢

1 个答案:

答案 0 :(得分:3)

这是非常常见的问题。您需要链接DLL和可执行文件以使用DLL中的标准库。这样他们就可以共享标准库的公共副本。否则,您最终会在可执行文件中尝试使用一个堆中的代码,并使用单独的堆在DLL中编码。当您传递几乎所有使用跨边界动态分配的内容时,每个都假定对象中的动态分配缓冲区来自其自己的堆。几乎任何操作都不仅会破坏对象,还会破坏整个堆。