2012-04-26 13 views
0

私は簡単なタスクを達成したいと思います: .NETルーチンを呼び出すC++/CLIライブラリを作成したいと思います。純粋にネイティブなC++アプリケーションから呼び出すことができます。私は静的に私のネイティブアプリからそのlibにリンクしたいです。ネイティブC++アプリケーションが呼び出すメソッドのシグネチャは、一般的にはC++/CLIとC++の新機能です。だから、あなたは私を助けてくださいことができ、これらの質問に答える:私はできるように私の小さなC++/CLIのプロジェクトのために1つの関数が1つの静的にネイティブC++にリンクされているC++/CLI lib

  1. を、私は(VC9ランタイムをターゲットに、タイプは出力としてのlibとクラスライブラリである必要がありますと仮定しますエンドユーザーのPCで利用できることを確認してください)。私はこの前提で正しいですか?

  2. 私のC++/CLIプロジェクトに書き込む必要のある署名付きのメソッドの概要の例を挙げることができます。具体的には、CLR型(byte []、int32、stringなど)への変換をどのように適切に行う必要がありますか?そして、このメソッドを "extern" C "__declspec(dllexport)"のようなもので飾ることで、このメソッドをネイティブのC++アプリケーションから呼び出すことができます。

  3. C++/CLIでcppとhファイルの間のコードを適切に区別するにはどうすればよいですか?

  4. 最後に、libリファレンスを追加すると、実際にネイティブアプリからどのように呼び出すことができますか?

ありがとうございます。

+0

あなたはあなたのアプリで[ネイティブランタイム](http://www.microsoft.com/en-us/download/details.aspx?id=14632)を発送します。だからあなたがどれをターゲットにするか心配しないでください。たとえば、VC2010ランタイムは、すべてのWindows OS上でXP SP3まで実行できます。 – Cameron

答えて

1
  1. クラスライブラリ:正しいですが、プロジェクトの設定タイプを動的ライブラリから静的ライブラリに変更する必要もあります。私はあなたが 'vc9ランタイムをターゲットにする'ことをどういう意味かわかりません。–あなたはスタティックライブラリを使用するネイティブコードと同じランタイムをターゲットにする必要があります。

  2. これはスタティックライブラリなので、__declspec(dllexport)は必要ありません。 .NETの型に変換する方法を知りたい場合は、コードが実際に行っていることを投稿する必要があります。一般的には、Marshal::CopyはC配列を.NET配列にコピーし、marshal_as<>はC文字列を.NET文字列にコピーすることが望ましいでしょうが、そのデータが変更可能であり、戻す前に元の型にマーシャリングされます。

  3. ソースコード内のヘッダー、宣言内のC++と同じ宣言です。

  4. 他の関数と全く同じです。– #include宣言を含むヘッダーと関数を呼び出します。

+0

このような迅速で詳細な回答をいただきありがとうございます!ちょうど1つの簡単な質問:nedでは、私は実質的に1つのファイル(ネイティブのアプリexe)を持ち、静的にリンクされたlibはCLRルーチンを使用する1つのメソッドが完全にそのネイティブexeに吸収されるでしょうか?私の理解は正しいのですか? –

+0

@George:正しい.exeを1つ作成しますが、その.exeはVC++ CRTと.exeの両方に依存します。NET実行時には、完全にスタンドアロンではありません。 – ildjarn

+0

もう一度ありがとう!あなたは大きな助けになってきました! –