2012-03-05 24 views
3

C++とCLIを使用してC++とCLIの間で相互運用性を重視し、アンマネージC++クラス用のC++/CLIラッパーを作成しています。私のC++クラスのいくつかのインスタンスがC#アプリケーションで必要です。C++/CLIでC++クラスをラップする方法

私はこのプロジェクトを構築するの.libファイルになるだろうと思ったが、中に出力されているすべてのあったこの

http://msdn.microsoft.com/en-us/library/ms235281.aspx

のような管理されていないクラスを非表示にするPIMPLを使用するCLRクラスライブラリを作りましたリリースフォルダはDLLです。 C++/CLIでクラスをエクスポートすることはできないと思っていましたが、CLRクラスライブラリプロジェクトで出力された.libファイルにリンクするだけですと私は少し混乱しています。私は間違った種類のプロジェクトを作成したと仮定することしかできませんが、このようなことについてはあまりドキュメントがないようです。

ありがとうございました。

答えて

3

は、MSDNの記事

C++クラスを作成し、そのCPPファイルのコンパイラオプションが設定されていることを確認しますと非常によく似ている「共通言語ランタイムサポート」

へ次に、pimplを使ってこのC++クラスをC++/CLIクラスで参照し、このcppファイルに "共通言語ランタイムサポート(/ clr)"が有効になっていることを確認します。

出力は、既存の.NETコードで使用できるDLLになります。

私は、ラッパークラスで作成したインターフェイスが倍精度、intなどで、C++クラスを参照していないことを確認しました。

@BillいくつかのC#コードでこのラッパーDLLを使用するには、単に「参照の追加」を使用してDLLへの参照を追加します。期待どおりにすべてのパブリック関数を呼び出すことができます。

+0

ありがとうAlastair –

+0

'C++クラスを作成し、そのcppファイルのコンパイラオプションが「共通言語ランタイムサポートなし」に設定されていることを確認します。この設定を変更できない場合(たとえば、編集できません)? – wil

3

出力とは、ネイティブコードを含む.Netアセンブリです。ネイティブコードを静的ライブラリに入れて、それをこのアセンブリにリンクさせたい場合は、それも機能します。

しかし、終わりに.Net(c#)アプリケーションにコードを含める場合は、.NETインターフェイスをアセンブリ(.dll)に配置する必要があります。私が過去にやっていること

+0

こんにちはニック、返信いただきありがとうございます。 C++/CLIはラッパークラスをエクスポートする必要がありますか?私の理解は、DLLからエクスポートされたアイテムのみを使用できるということでしたが、以前の投稿では、C++/CLIでシンボルをエクスポートするという概念はないと言われました。 –

+1

正しいですが、C++/CLIでシンボルをエクスポートするという概念はありません。 Assemblyヘッダーには、使用可能なすべてのタイプが含まれます。 Visual Studioツールで 'ildasm.exe'を使用して、アセンブリの内容を自分で調べることができます。注目すべきことは、アセンブリは従来のDLLと同じではないということです。マイクロソフトは接尾辞を過負荷にしました! – Nick

+0

私が密集しているが、明確にするために、わからないことは何もエクスポートされない場合、C#アプリケーションでラッパークラスを使用する方法です。 –

関連する問題