2010-02-21 81 views
2

我是C++/CLI的新手,我嘗試將本地C++ GUID轉換爲我的C++/CLI Guid ^。當我試圖轉換:將非託管GUID轉換爲託管指導^

BlockInfo^ blockInfo = gcnew BlockInfo(); 
blockInfo->BlockFilterGuid = ba.BlockAllFilter.subLayerKey; 

...我收到以下錯誤:

error C2440: '=' : cannot convert from 'GUID' to 'System::Guid ^'

我明白我的問題的根源是,我試圖從非託管轉換爲託管類型,但在C++或C++/CLI中,我無法知道如何解決這個問題。

回答

4

原生GUID定義:

typedef struct _GUID { 
    DWORD Data1; 
    WORD Data2; 
    WORD Data3; 
    BYTE Data4[8]; 
} GUID; 

您需要分配一個System::Guid並使用數據在本地GUID正確構建它。

System::Guid ^FromNativeGUID(const GUID &g) 
{ 
    return gcnew System::Guid(g.Data1, g.Data2, g.Data3, g.Data4[0], g.Data4[1], g.Data4[2], 
         g.Data4[3], g.Data4[4], g.Data4[5], g.Data4[6], g.Data4[7]); 
} 
+4

系統:: GUID是值類型。你的函數效果很好,但是返回類型應該是System :: Guid(而不是System :: Guid ^),並且應該刪除gcnew。 – Naaff

3

以前的答案是好的,但這次真的要足夠:

Guid FromNativeGUID(const GUID &guid) 
{ 
    return *reinterpret_cast<Guid *>(const_cast<GUID *>(&guid)); 
} 
相關問題