GUIDを文字列化したい……ってえー
タイトルのように、GUID を 文字列化したかったのです。 ちなみに、その文字列をファイルに書き込んでみたり、書き込んだ値を読み込んで再度 GUID に戻してみたり…という事を計画してます。
さて、GUID を printf とかで自前で文字列化する方法も取れますが、結構使う人多そうだから API として用意されているだろうー と調べてみたところ...
の2つがある模様。
今回は諸事情で後者(とそれの対の UuidFromString 関数)を利用するしてみる事に決めた…んですが…………VS2003での宣言がですね…
// VS2003 付属のヘッダーの rpcdec.h(1854) ぐらい
/* client/server */
RPCRTAPI
RPC_STATUS
RPC_ENTRY
UuidToStringA (
IN UUID __RPC_FAR * Uuid,
OUT unsigned char __RPC_FAR * __RPC_FAR * StringUuid
);
/* client/server */
RPCRTAPI
RPC_STATUS
RPC_ENTRY
UuidFromStringA (
IN unsigned char __RPC_FAR * StringUuid,
OUT UUID __RPC_FAR * Uuid
);
/* client/server */
RPCRTAPI
RPC_STATUS
RPC_ENTRY
UuidToStringW (
IN UUID __RPC_FAR * Uuid,
OUT unsigned short __RPC_FAR * __RPC_FAR * StringUuid
);
/* client/server */
RPCRTAPI
RPC_STATUS
RPC_ENTRY
UuidFromStringW (
IN unsigned short __RPC_FAR * StringUuid,
OUT UUID __RPC_FAR * Uuid
);
ASCII版が unsinged char なので、TCHAR 使いつつ ASCII ビルドすると char になる故に型が一致しなくてコンパイルが通らない! orz*1
文字列バッファ要求してるのに unsigned char な事実に狂気を感じる。
キャスト一つかませば問題は解決できるのですが、ちょーっと嫌な感じ。
余談
ちなみに、VS2005 での宣言なんですが…
// VS2005 付属のヘッダーの rpcdec.h(51) ぐらい
typedef __nullterminated unsigned char __RPC_FAR *RPC_CSTR;
typedef __nullterminated unsigned short __RPC_FAR *RPC_WSTR;
// VS2005 付属のヘッダーの rpcdec.h(1880) ぐらい
/* client/server */
RPCRTAPI
RPC_STATUS
RPC_ENTRY
UuidToStringA (
__in UUID __RPC_FAR *Uuid,
__deref_out RPC_CSTR __RPC_FAR *StringUuid
);
/* client/server */
RPCRTAPI
RPC_STATUS
RPC_ENTRY
UuidFromStringA (
__in RPC_CSTR StringUuid,
__out UUID __RPC_FAR *Uuid
);
/* client/server */
RPCRTAPI
RPC_STATUS
RPC_ENTRY
UuidToStringW (
__in UUID __RPC_FAR *Uuid,
__deref_out RPC_WSTR __RPC_FAR *StringUuid
);
/* client/server */
RPCRTAPI
RPC_STATUS
RPC_ENTRY
UuidFromStringW (
__in_opt RPC_WSTR StringUuid,
__out UUID __RPC_FAR *Uuid
);
宣言がちょっと変わってる。orz
んまぁ、結局は unsigned char とかになる故に物凄い厳密に困る訳ではないのですが……
やっぱりちょっといやんな感じ。orz