【问题标题】:C++ | Windows - Passing STL objects to DLLC++ | Windows - 将 STL 对象传递给 DLL
【发布时间】:2016-10-18 02:35:26
【问题描述】:

我看到了一些非常好的问题,但我决定问我自己的问题,因为它们并不是我想知道的。

关于不应该将 std::string 传递给函数(来自 DLL)的讨论很多,因为一切都必须匹配 CRT、平台版本等,但你可以安全地将 const *char 传递给函数,然后在 .dll 内部使用 std::string 的?

我问的原因是因为我最近发现 C++ 字符串非常有用,我想将它们与我的 .DLL 一起使用,但我发现由于运行时模板等原因,它们与 .dll 一起使用是不安全的。

所以我的问题主要是,是否有一种“安全”的方式在 .dll 中使用 std::string ?

【问题讨论】:

    标签: c++ stdstring crt


    【解决方案1】:

    在内部使用它是完全安全的。

    也不要太担心跨 DLL 边界使用std::string。您不能在公共接口中使用它,但是当您使用自己的程序发布 DLL 时,您可以控制双方。在一个 VS 解决方案中的两个 Visual Studio 项目中同时拥有 DLL 和 EXE 是很常见的。这样可以确保它们使用相同的平台版本等构建。

    【讨论】:

      【解决方案2】:

      在 DLL 接口中随意使用std::string。但是你应该确保DLL和应用程序必须使用相同的std库来构建以避免std::string边界问题。

      【讨论】:

        【解决方案3】:

        没有 ABI 文档记录,因此技术上,它可以随编译器版本而变化,并且取决于编译器设置。

        如果调用者和 DLL 是由相同版本的 Visual C++ 构建的,则应该确保安全。

        但这意味着:您不能在公共接口中使用它,并且您放弃了版本之间的兼容性(例如,在升级编译器之后运行带有更新 DLL 的 oder EXE)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多