2017-02-24 6 views
0
//MyWrapper.h 
#include "arithmetic.h" 
#include "mathematics.h" 
namespace MyWrapper { 
    public ref class ClassA 
    { 
    public: 
     ClassA(); 
     ~ClassA(); 
     int add(int, int); 
    private: 
     MyEngine::Arithmetic *nativeClassA; 
    } 

    public ref class ClassB 
    { 
    public: 
     ClassB(ClassA^ arith); 
     ~ClassB(); 
     int pow(int, int); 
    private: 
     MyEngine::Mathematics *nativeClassB; 
    } 
} 

//MyWrapper.cpp 
#include "MyWrapper.h" 
My::ClassA::ClassA() 
{ 
    nativeClassA = new MyEngine::Arithmetic(); 
} 
My::ClassA::~ClassA() 
{ 
    delete nativeClassA; 
} 
int My::ClassA::add(int a, int b) 
{ 
    return nativeClassA->add(a, b); 
} 
My::ClassB::ClassB(ClassA^ classA) 
{ 
    nativeClassB = new MyEngine::Mathematics(classA->nativeClassA); //***Error*** 
} 
My::ClassB::~ClassB() 
{ 
    delete nativeClassB; 
} 
int My::ClassB::pow(int a, int b) 
{ 
    int result = nativeClassB->pow(a, b); 
    return result; 
} 

ここで、数学のクラスは算術クラスで初期化する必要があります。 しかし、nativeClassAはClassAのプライベート変数です。 したがってnativeClassB = new MyEngine::Mathematics(classA->nativeClassA);、コンパイルエラーが発生します。C++/CLIマネージクラスでプライベート変数にアクセスする方法

そこで、nativeClassAをpublicに変更しました。

しかし、その時点で、nativeClassAはc#にエクスポートされます。 nativeClassA変数をc#にエクスポートしたくありません。

どうすれば修正できますか? アドバイスありがとうございます。

答えて

1

管理クラスを作成しているので、C#にあるすべてのアクセス修飾子を使用できます。これはinternalの完璧なシナリオのようです。 (リンクされたドキュメントはC#用ですが、C++/CLIでは同じキーワードです)

+1

内部:MyEngine :: Arithmetic * nativeClassA; – KDEV

+0

ありがとう、それは正常に動作します。 – KDEV

+0

C++/CLIのドキュメントは次のとおりです。https://msdn.microsoft.com/en-us/library/ke3a209d.aspx#BKMK_Member_visibility –

関連する問題