-1

UUID を作成し、事前に割り当てられたバッファーに人間が読める形式で書き込むために、次の関数を使用しています。何かがおかしい。

void createUUID(char* pDst)
{
    UUID    lUUIDObj;
    UuidCreate(&lUUIDObj);
    unsigned char*  lDest = reinterpret_cast<unsigned char*>(pDst);
    UuidToStringA(&lUUIDObj, &lDest)
}

メソッドの最後に、デバッガーは次のように言います。

  • lDest = 0x01fe4fd8 "df4a5ed8-c0d2-495a-84d7-ce0e07cf2113"
  • pdst = 0x0012ec7c ""ìetoodhealthouseledefhe「

どちらも同じ内容かと思っていましたが、そうではありません。

どうしたの?ありがとう。

4

3 に答える 3

5

のドキュメントを見ると、次のように書かれUuidToStringAています。

RPC ランタイム ライブラリは、StringUuid パラメータで返される文字列にメモリを割り当てます。

これは、呼び出し後がlDestもはや を指していないことを意味しpDstます。

于 2012-01-17T11:27:26.143 に答える
1
void createUUID(char* pDst)
{
    UUID    lUUIDObj;
    UuidCreate(&lUUIDObj);
    unsigned char*  lDest = reinterpret_cast<unsigned char*>(pDst);
    //UuidToStringA(&lUUIDObj, &lDest);
    UuidToStringA(&lUUIDObj, lDest);
}

の値を最初に指していたlDest変更せずに上書きしたようです。

于 2012-01-17T11:27:50.247 に答える
0

ヨアヒム・ピレボルグの答えを完成させるために、修正された関数は次のとおりです。

void createUUID(char* pDst)
{
    UUID    lUUIDObj;
    UuidCreate(&lUUIDObj);
    unsigned char*  lTmpStr;
    UuidToStringA(&lUUIDObj, &lTmpStr);
    sprintf(pDst, reinterpret_cast<char*>(lTmpStr));
    RpcStringFreeA(&lTmpStr);
}
于 2012-01-17T12:24:36.957 に答える