出于某种原因,从 DLL 函数返回一个字符串会使我的程序在运行时崩溃,并出现错误 Cranberry Library Tester.exe 中 0x775dfbae 处未处理的异常:Microsoft C++ 异常:内存位置 0x001ef604 处的 std::out_of_range..
。
通过将 DLL 代码编译为 .exe
并在 main
函数中进行一些简单测试,我已经验证这不是函数本身的问题。
具有其他返回类型(int
、double
等)的函数可以完美地工作。
- 为什么会这样?
- 有没有办法解决此问题?
DLL 的源代码:
// Library.h
#include <string>
std::string GetGreeting();
.
// Library.cpp
#include "Library.h"
std::string GetGreeting()
{
return "Hello, world!";
}
测试源代码:
// Tester.cpp
#include <iostream>
#include <Library.h>
int main()
{
std::cout << GetGreeting()
}
编辑:我正在使用 VS2010。
结论
解决方法是确保使用相同的编译器和相同的选项等编译库和源代码。
最佳答案
发生这种情况是因为您在一个 DLL 中分配内存(使用 std::string 的构造函数),并在另一个 DLL 中释放它。您不能这样做,因为每个 DLL 通常会设置它自己的堆。
关于c++ - 从 DLL 函数返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4446620/