2009-03-24 11 views
3

++我々は次のようにのGUIDのメンバーにアクセスすることができます。へのアクセスのGUIDメンバーがCで

GUID guid = {0}; 
CoCreateGuid(&guid); 
dwRand = guid.Data1 & 0x7FFFFFFF; 

C++のGUIDの構造は次のとおりです。

Data 1 - unsigned long 
Data 2 - unsigned short 
Data 3 - unsigned short 
Data 4 - unsigned char 

質問:変換する方法C++コードの3行目(dwRand = guid.Data1 & 0x7FFFFFFF;)。つまり、guidメンバーにアクセスする方法は? C#にはこのようなことはありません。

ありがとうございます!

+0

はこの.NET C++、または標準C++ですか?後者の場合、GUIDクラスはどこから取得していますか? – strager

+0

FYI:かなり古いバージョンのWindowsのため、GUIDはMAC、日付/時刻、ランダム化番号などの簡単な方法では構成されません。 guidgenでいくつかのGUIDを生成してみてください。 –

答えて

4

あなたは、構造を作成することができます。

public struct MyGuid 
{ 
    public int Data1; 
    public short Data2; 
    public short Data3; 
    public byte[] Data4; 

    public MyGuid(Guid g) 
    { 
     byte[] gBytes = g.ToByteArray(); 
     Data1 = BitConverter.ToInt32(gBytes, 0); 
     Data2 = BitConverter.ToInt16(gBytes, 4); 
     Data3 = BitConverter.ToInt16(gBytes, 6); 
     Data4 = new Byte[8]; 
     Buffer.BlockCopy(gBytes, 8, Data4, 0, 8); 
    } 

    public Guid ToGuid() 
    { 
     return new Guid(Data1, Data2, Data3, Data4); 
    } 
} 

、あなたがGUIDを変更する場合:

Guid g = GetGuidFromSomewhere(); 
MyGuid mg = new MyGuid(g); 
mg.Data1 &= 0x7FFFFFFF; 
g = mg.ToGuid(); 
5

Guid.ToByteArrayを使用して値をバイトとして取得できますが、「グループ化」バイトのアクセサメソッド/プロパティはありません。あなたはC#3を使用している場合、あなたはいつもそれらを拡張メソッドとして書くことができます。

+0

+1「それは私が意味していたことだ」 :-) – Moose

関連する問題