2011-01-21 13 views
0

私はCoCreateGuid()を呼び出してGUIDを生成するシンプルなクラスを持っています。その後、結果をUuidToString()に渡します。Win32 UuidToString()からの予期しない文字列の呼び出し

私は形式の文字列を取得するほとんどの時間:

e0e3e4b5-6f13-4043-b6c6-488c8b85cbd1

しかし、いくつかのマシン上での結果はこのようなものになります。

を0-40:61:86:C2:4E:4F

誰もこの予期しない動作を説明できますか? 2番目のフォームはGUIDですか?

更新:私はエラーの原因を見つけましたが、UuidToString()がそれがそうであると思った文字列を返さないことが判明しました。

すべての回答ありがとうございます。

+0

'CoCreateGuid'と' UuidToString'でエラーコードをチェックしましたか?そして 'UuidToString'ではなく' StringFromCLSID'を試しましたか? –

答えて

1

警告:これは唯一の推測です!

あなたの所在地は、MACアドレスとよく似ています。

CoCreateGuidは、基本的にUuidCreateを使用します。 コンピュータのネットワークアダプタを使用して、ローカルに一意のUUIDを作成できます。 私の推測では、これらのマシンでは、ネットワーク構成の何かが "バグ"か何かを引き起こすので、中間の文字列が返されます。

あなたはRPC_S_UUID_NO_ADDRESSフラグ

http://msdn.microsoft.com/en-us/library/aa379205(v=vs.85).aspx

1

を直接UuidCreateを使用し、使用してみてくださいGUIDは、128ビットの数値ではなく文字列であるため、厳密でもない形/である/ GUIDを話すことができました。私は2番目のフォームを見たことがありませんが、私はそれが有効と定義される実装を想像することができます。通常はUuidCreate、UuidFromStringなどはrpcrt4.dllに実装されていますが、別の実装があると思います。文字列をUuidFromStringに渡し、その関数の戻り値を確認します。最初に疑わしいGUIDを与えたUuidCreateとUuidToStringと同じDLLに実装されていることを確認してください。

1

奇妙なことに、 RPCは奇妙なAPIですが、それは非常に古いものであり、癖はひどく保存されています。代わりにStringFromGUID2()を使用することをお勧めします。同じことを達成する2つの方法を持つことは、常に兆候です、後で良いです。

関連する問題