ソースコードがある C++/CLI dll がありますが、それを変更することはできず、メンバー変数にアクセスしたい独自の dll があります。
アセンブリ 1 (変更不可):
public ref class A
{
public:
int m_iInteger;
SomeClass* m_pPointer;
};
アセンブリ 2 (独自):
A^ a;
int i = a->m_iInteger; // no problem
SomeClass* x = a->m_pPointer; // C2248
問題は、コンパイラがエラーを表示することです:
エラー C2248: 'A::m_pPointer': クラス 'A' で宣言されたプライベート メンバーにアクセスできません
「オブジェクト ブラウザ」には次のように表示されます。
public SomeClass* m_pPointer A のメンバー
別のアセンブリからネイティブ パブリック メンバーにアクセスする方法はありますか?
Visual Studio 2012 を使用しています
編集: クラス「SomeClass」はネイティブdllで定義されています(これも変更できません)
編集 2: 解決策が見つかりました。それはあまり良くありませんが、うまくいきます:
System::Reflection::Pointer^ ptr = (System::Reflection::Pointer^)typeof(A)->GetField("m_pPointer")->GetValue(a);
SomeClass* result = static_cast<SomeClass*>(System::Reflection::Pointer::Unbox(ptr));