我正在调用一个静态链接的 .dll,我看到了这个错误:
我编写了 .dll 和调用代码。不应发生此错误。我想知道是否有人以前遇到过它?.dll 仅包含大约 10 行代码,它只是一个测试 .dll,以了解 dll 的一般工作方式。当我将 std::string 从 .dll 中传回时,它会爆炸。
我正在使用 Visual Studio 2012 和 C++。
接下来我会尝试什么
从调试断言... _pFirstBlock == pHead:
如果在多线程模块中使用单线程库,则可能会出现此问题。
明天,我将尝试在多线程模式下重新编译 Boost 静态库(我的 .dll 设置为多线程静态模式)。
接下来我会尝试什么
请参阅在从 DLL 导出的对象中使用字符串会导致运行时错误:
你需要做两件事之一
- 使 DLL 和使用它的客户端都链接到 CRT 的DLL 版本(例如,不是静态的)。
- 或者您需要确保不会跨 DLL 边界传递动态分配的内存(例如包含在字符串对象中)。换句话说,不要有返回字符串对象的 DLL 导出函数。
乔
这似乎与正在发生的事情相匹配,它在我将字符串传回 .dll 边界的精确点处爆炸。仅当所有内容都以静态模式链接时才会出现此问题。现在可以解决了。
接下来我会尝试什么
解决方案
我有一个很好的解决方案,请参阅下面的答案。