gpt4 book ai didi

c++ - 将 std::string 作为参数从一个 DLL 传递到另一个 DLL 引发访问冲突错误

转载 作者:行者123 更新时间:2023-11-28 04:11:05 26 4
gpt4 key购买 nike

该应用程序有许多 C++ 编译的 DLL,每个都公开许多 C 类型接口(interface)。应用程序有一些std::string类型的配置变量需要在DLL接口(interface)逻辑中使用。在将此 std::string 类型参数传递给这些 DLL 时,抛出“0xC0000005:访问冲突执行位置”。这与 DLL 项目的 VS 项目设置有关吗?请澄清。

最佳答案

您可能不会让它们轻松工作。

std::string 可能在来自不同库的不同编译之间不兼容。

当您说“该应用程序有许多 C++ 编译的 DLL”时,您很可能处于这种情况:

图书馆 A:

// STL
class std::string
{
... under the hood implementation of std::string (version A)
};

// Library code
std::string someFunctionInA();

图书馆 B:

// STL
class std::string
{
... under the hood implementation of std::string (version B)
};

// Library code
void someFunctionInB(const std::string& myString);

崩溃程序:

std::string stringFromA = someFunctionInA();
someFunctionInB(stringFromA);

明白了吗?你有 2 个版本的 std::string 并且你编译程序是因为你在程序编译期间使用相同的 header ......但在运行时,他们期望 2 种不同的类型。

对象的大小、数据的顺序以及简单的分配器可能不匹配……它会崩溃!

如何解决:

  • 如果您可以从源代码编译,请确保您使用相同的 STL 版本。
  • 如果您不能从源代码编译,请为它们创建 C 包装器并使用 C-String 作为接口(interface)...它们将始终有效。

关于c++ - 将 std::string 作为参数从一个 DLL 传递到另一个 DLL 引发访问冲突错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57781994/

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