訪問本地成員,我有一個C++/CLI DLL,我的源代碼,但我不能改變它,我有我自己的DLL,我想訪問一個成員變量:C++/CLI不能從不同的裝配
組件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'
「對象瀏覽器」 顯示宣稱私有成員:
公共SomeClass的* m_pPointer一個
會員有沒有辦法從一個不同的程序集訪問本地公衆成員?
我使用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));
這個樣本對我來說很好。我不禁想到還有一些額外的代碼導致了這一點。另外,如果你不A^a = gcnew A();你將得到一個空例外。 – Inisheer
當然還有更多的代碼。這是一個大項目。我試圖簡化代碼,但我不知道哪些其他代碼會導致錯誤。我無法訪問該託管類的任何本機指針。你有什麼主意嗎? – user37337
[Here](http://msdn.microsoft.com/en-us/library/tsbce2bh(v = vs.80).aspx)是該編譯器錯誤的文檔。它聽起來像是一個子類或朋友類錯了。 – stonemetal