2017-07-18 47 views
0

我想換一個C++指針字段財產CLI中,這裏是我的代碼:如何在C++/CLI中將'int *'轉換爲'int ^'?

class NativeClass 
{ 
public: 
    int* nativeApointer; 
} 

ref class ManagedClass 
{ 
    NativeClass* thisClass 
    property int^ A 
    { 
     int^ get() 
     { 
      return thisClass->nativeApointer 
     } 
    } 
} 

編譯器發現errror,所以怎麼也非託管指針轉換爲內部指針?

+0

.NET屬性使用getter/setter而不是返回一個可寫的引用(即將到來的C#版本*可能會*最終改變這一點)。那麼爲什麼不'get(){return * nativepointer; } set(int newvalue){* nativepointer = newvalue; }' –

+1

基本上你應該*永遠不會*看到'int ^'類型。 'int'是一個值類型,所以它通常只是'int',而byref參數是'int%',並且它與'^'結合是奇怪的強類型盒裝值,與所有其他.NET語言不兼容。 –

+0

@BenVoigt ref返回已經在C#語言中了)@cook you * can *暴露一個類型爲int *的本地指針,但除非這指向了一個int數組,否則您應該使用get /通過簡單的'int'設置對。 –

回答

0

這將是這樣的:

using namespace System::Runtime::InteropServices; 

    class NativeClass 
    { 
    public: 
     int* nativeApointer; 
    }; 

    public ref class ManagedClass 
    { 
     //NativeClass* thisClass 
     IntPtr thisClass; 
    public: 
     property int A 
     { 
      int get() 
      { 
       return *((NativeClass*)(void*)thisClass)->nativeApointer; 
      } 
     } 
    }; 

注意:在這種情況下,我們返回的地方,指針顯示的值。我不認爲int^int *是一個好主意。如果大部分指針都是在本地部分完成的,並且只將最重要的思想與屬性外部世界聯繫起來,那也許會更好。