gpt4 book ai didi

c++ - dllexported 附加字符串已损坏

转载 作者:行者123 更新时间:2023-11-30 03:07:37 27 4
gpt4 key购买 nike

我有一个加载 dll 的 exe。我都写了。

我正在导出一个返回 std::wstring 的函数 foo。

它所做的就是说

std::wstring blah = L"rgjwgfw";

  return blah.append(L"hey");

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

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

谢谢

最佳答案

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

关于c++ - dllexported 附加字符串已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5733889/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com