1

C++ での GUID の宣言が C# と異なるかどうかを尋ねたいです。私はC#でこれに遭遇しました:

GUID InterfaceClassGuid = {0x4d1e55b2, 0xf16f, 0x11cf, 0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30}; 

これは C++ で実行可能ですか? そうでない場合、どのように変換できますか?ありがとう。

4

4 に答える 4

3

GUIDinの定義は、<windows.h>この構文と互換性があります。Cでも動作します。

于 2013-02-15T09:10:16.207 に答える
3

おそらく最も簡単な (そして便利な) のは、MS 固有のものを活用すること__declspec(uuid(...))です。

class __declspec(uuid("{C1F400A4-3F08-11D3-9F0B-006008039E37}")) NullRenderer;
GUID x = __uuidof(NullRenderer);

この方法では、ソース コードで GUID コンポーネントを分割する必要さえありませんが、それを真の GUID 宣言として持つことができます。

于 2013-02-15T09:11:08.037 に答える
2

標準 C++ で定義されている GUID 型はありません。struct GUIDただし、同じ方法で初期化できる を定義することもできます (一部のコンパイラ ベンダーが定義している可能性もあります)。

edit : Microsoft は GUIDを次のように定義しています。

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

この定義により、コードはそのまま機能するはずです。

于 2013-02-15T09:07:49.547 に答える
1

GUID 構造は C# とは異なります。定義されています

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

変数として扱いたい場合は、次のようにします。

GUID guid = {0x4d1e55b2, 0xf16f, 0x11cf, {0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30}};

試してみて、ここも見てください:SO

于 2013-02-15T09:10:36.840 に答える