2010-11-24 16 views
0

おやすみに関するいくつかの質問、C++/CLIとC#の統合

私は次のコードのようなものを使用して、私のC#ライブラリで使用するC++/CLIでの単純なDLLを作成しようとしていた。

// This is the main DLL file. 

#include "stdafx.h" 

namespace Something 
{ 
    public class Tools 
    { 
     public : int Test (...) 
     { 
      (...) 
     } 
    } 
} 

私はdllをコンパイルして問題なくC#プロジェクトにロードし、C#の名前空間Somethingとクラスツールを使用できます。問題は、Tools.Test(何か)を書こうとすると、ToolsにTestの定義がないというエラーメッセージが表示されることです。なぜ宣言されていても、コンパイラはその関数を取得できないのですか?

また、2つのプロジェクト間でクラスを共有できます。半分はC#で書かれ、半分はマネージC++で書かれていますか?

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

+0

が私たちを表示しますコードの他の半分、テストを呼び出して失敗する部分 – abelenky

答えて

0

この関数は静的ではありません。

var someTools = new Tools(); 
int result = someTools.Test(...); 

またはメソッドが静的にするには、この方法を試してください。

public : 
    static int Test (...) 
    { 
      (...) 
    } 
+0

Miguelの例が動作しないのは、メソッドが静的ではないためではなく、クラスがrefクラスではなく、メソッドを静的にしてもこれは変わりません。 –

1

C#が唯一のアクセスはC++のクラスを管理することができます。 ToolsがC#からアクセス可能にするための管理対象クラスであることを示すには、public ref class Toolsを使用する必要があります。詳細はmsdnを参照してください。

このクラスは、マネージC++またはC#で使用できます。マネージC++クラスでは、ネイティブC++クラスを内部的に使用することもできます。

1

あなたはプロジェクト全体で管理クラスを共有することができますが、あなたが管理されていない(つまり、標準C++クラスで書かれました。C++で管理クラスを定義するref classキーワードを使用します。

// This is the main DLL file. 

#include "stdafx.h" 

namespace Something 
{ 
    public ref class Tools 
    { 
     public : int Test (...) 
     { 
      (...) 
     } 
    } 
}