【问题标题】:Combining C++/CLR and C++结合 C++/CLR 和 C++
【发布时间】:2011-12-04 07:39:30
【问题描述】:

我想在我的 C++/CLI 应用程序中包含第三方 C++ 库。

执行此操作的标准方法是什么?

提前致谢。

【问题讨论】:

    标签: c++ interop c++-cli


    【解决方案1】:

    我不知道是否存在这样的标准,您可以像使用 C++ 应用程序一样在 C++/CLI 应用程序中使用 C++ 库。 我总是尝试做的唯一一件事是将第三个库包装在代理或外观设计模式之后,以便客户端始终使用托管类。 如果您的 C++/CLI 应用程序是其他 .NET 应用程序使用的库,这一点尤其重要。

    例子:

    // 3rd party header
    class Value{};
    
    // your C++/CLI app
    #include <3rdpaty/Value.h>
    
    public ref class ValueWrapper
    {
    public:
        // wrapper interface here
    
    private:
        std::scoped_ptr<Value> value_;
    };
    

    【讨论】:

    • 这不会编译,因为您不能将非托管值类型用作托管类的成员
    • 您始终可以使用前向声明和指向值的不透明指针。这编译并完美运行。
    • 这就是我几个月前做接口的方式,效果很好。
    • "这可以完美地编译和运行。" 我对此表示怀疑,因为没有 std::scoped_ptr&lt;&gt; 这样的东西...
    【解决方案2】:

    几乎没有什么,C++/CLI 是明确创建来支持这种情况的。只需从 CLR 节点中选择一个项目模板即可开始。您必须告诉链接器链接 .lib 文件并在您的 C++/CLI 源代码中#include 标头。

    您可能遇到的唯一问题是#include 标头可能包含可能被 C++/CLI 编译器误解的声明。例如 C 函数声明。最好的办法是明确地告诉编译器。像这样:

    #include "stdafx.h"
    #pragma managed(push, off)
    #include "3rdparty.h"
    #pragma managed(pop)
    #pragma comment(lib, "3rdparty.lib")
    // Rest of your code
    

    sn-p 中的#pragma 注释告诉链接器也链接第 3 方库的 .lib 文件。使您不必在链接器的附加依赖项设置中显式执行此操作。

    就是这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 2013-06-22
      • 2020-11-20
      • 1970-01-01
      相关资源
      最近更新 更多