可以跨 DLL 边界按值传递 std::string 吗?

zoo*_*opa 4 c++ dll stdstring visual-studio

可以跨使用不同版本的 Visual Studio 构建的 DLL 之间的 DLL 边界按值传递 std::string 吗?

ten*_*our 5

不,因为模板化代码是按模块单独生成的。

因此,当您的 EXE 实例化 astd::string并将其传递给 DLL 时,DLL 将开始对其使用完全不同的实现。结果是一团糟,但它通常几乎可以工作,因为实现非常相似,或者很难发现混乱,因为它是某种微妙的堆损坏。

即使它们都是用相同版本的 VS 构建的,它也非常不稳定/脆弱,我不推荐它。要么在模块之间使用 C 风格的接口(例如,COM),要么不使用 DLL。

更详细的解释在这里:Creating c++ DLL without static methods

在这里:如何调用 C++ DLL 的函数,该函数接受来自 C# 的 stringstream 类型的参数?