2011-12-04 17 views
2

私のC++/CLIアプリケーションにサードパーティのC++ライブラリを組み込みたいと思います。C++/CLRとC++の組み合わせ

これを行うための標準的な方法は何ですか?

ありがとうございます。

答えて

1

、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 

そのスニペット内の#pragmaコメントも、サードパーティのライブラリの.LIBファイルをリンクするようにリンカーに指示します。リンカの[追加の依存関係]設定で明示的に行う必要がなくなります。

それだけです。

2

このような標準が存在するかどうかわかりませんが、C++アプリケーションと同様にC++/CLIアプリケーション内でC++ライブラリを使用できます。 私が常にやろうとしているのは、クライアントが常にマネージクラスで動作するように、3番目のライブラリをProxyまたはFacadeのデザインパターンで囲むことです。 これは、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_; 
}; 
+0

管理対象クラスのメンバとしてアンマネージ値型を使用できないため、コンパイルされません。 – stijn

+0

常に、値への前方宣言および不透明ポインタを使用できます。これは完全にコンパイルして動作します。 – nogard

+0

これは私が数ヶ月前に私のインタフェイスをした方法です。 – Max

関連する問題