2012-03-08 5 views
0
namespace mcWrapper { 
struct S1 
{ 
    int n1; 
    int n2; 
}; 
class C1 
{ 
public: 
    void Test(S1* ps1) 
    { 

    }; 
}; 

public ref class Class1Wrapper 
{ 
public: 
    Class1Wrapper() 
    {   
     _pC1 = new C1(); 
    }; 
    void Test(S1* ps1) 
    { 
     _pC1->Test(ps1); 
    } 
private: 
    C1* _pC1; 
};} 

ビルドすると、.net dllを取得できます。管理されたC++を使ってクラスをラッパー(ネイティブC++)、ネイティブ構造体をどうやってやりますか?

このDLLを使用するC#クライアントを作成します。

//c#  
public Form1() 
    { 
     InitializeComponent();    
     var c1 = new mcWrapper.Class1Wrapper(); 
     //we can find Test method , but we cannot type codes like: s1* 
     c1.Test()//????????????????????????????????? 

    } 

私はC#でClass1Wrapper.Testを実行することはできません。

次に、Test()をTest(int^n)に変更しようとしました。 Test(int n)をTestとして見つけました。

答えて

0

だから、私は何をすべきするような新しい管理構造体に設定されています

public value struct CsS1{int n1;int n2} 

をし、その後

Class1Wrapper::Test(CsS1* pcs1) 
{ 
    S1* ps1 = new S1(); 
    ps1.n1=pcs1.n1; 
    ps1.n2=pcs.n2; 
    _pc1->Test(ps1); 
    delete ps1; 
} 

Class1Wrapper::Test(S1* ps1){_pc1->Test(ps1);} 

からテスト(...)を変更ラッパーのためのそのハードワーク。私は時間を無駄にしていると思う。他の方法はありません。

+0

ようこそ、スタックオーバーフロー!実際の回答の場合にのみ* Post answer *ボタンを使用してください。この回答に関する情報を含む追加情報を追加するには、質問を修正する必要があります。 –

+0

私はそれを簡単にする方法がないのではないかと心配しています。そして、 'S1'がもっと複​​雑なクラスであれば、' CsS1'が 'S1'ポインタを包むようにすればもっと複雑になります。 – Stephan

関連する問題