c++ - 从 DLL 函数返回字符串

标签 c++ string visual-studio-2010 dll

出于某种原因,从 DLL 函数返回一个字符串会使我的程序在运行时崩溃,并出现错误 Cranberry Library Tester.exe 中 0x775dfbae 处未处理的异常:Microsoft C++ 异常:内存位置 0x001ef604 处的 std::out_of_range..

通过将 DLL 代码编译为 .exe 并在 main 函数中进行一些简单测试,我已经验证这不是函数本身的问题。

具有其他返回类型(intdouble 等)的函数可以完美地工作。

  • 为什么会这样?
  • 有没有办法解决此问题?

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/

相关文章:

c++ - 函数外的代码

c++ - 如何最好地将 std::vector < std::string > 容器写入 HDF5 数据集?

silverlight - 在 VS2010 中找不到 DataContractJsonSerializer

c# - 修复代码分析错误或违反 Liskov 替换原则/使代码效率低得多

c++ - C++ 中接受 2D 数组、将其乘以整数并返回新的 2D 数组的函数?

c++ - 两个物体的蛮力碰撞检测速度太慢

java - 如何在 Java 中比较字符串?

python - XML 解析 - ^H 字符/符号?

javascript - 用于匹配字符串中特定模式的字符串原型(prototype)语法

visual-studio-2010 - Visual Studio 2010 : Visual Debugger Drill down into collection pain