私はstd :: stringからC++でGUID構造体(https://msdn.microsoft.com/fr-fr/library/windows/desktop/aa373931(v=vs.85).aspx)を埋めようとしています。C++でGUIDを埋めているときのエラー
私はexemple(文字列は、実際の関数のパラメータに渡されます)として次の文字列をしようとしている:"eec5ad98-8080-425f-922a-dabf3de3f69a"
が、まだ私はまだ空のGUIDを取得します。
私は、関数CLSIDFromStringは、MSDNフォーラムでこの目的のために使用することができました。https://social.msdn.microsoft.com/Forums/en-US/58fbd857-edef-4e77-8355-c426523cf06f/how-to-convert-cstring-to-guid-?forum=vcmfcatl
コード:
int main()
{
std::string sGuid = "eec5ad98-8080-425f-922a-dabf3de3f69a";
fromStringToGuid(sGuid);
}
GUID fromStringToGuid(std::string sGuid)
{
GUID guid;
LPCOLESTR lpcGuid = (LPWSTR) sGuid.c_str();
std::cout << "LpcGuid : " << lpcGuid << std::endl;
std::cout << "String GUID : " << sGuid << std::endl;
CLSIDFromString(lpcGuid, &guid);
std::cout << "GUID : " << std::hex << guid.Data1 << " " << guid.Data2 << " " << guid.Data3 << " " << guid.Data4;
return guid;
}
結果:
LpcGuid : 0428ABC0
String GUID : eec5ad98-8080-425f-922a-dabf3de3f69a
GUID : 0 0 0 i = 0
GUIDを持つべきです例えば、0
の代わりにeec5ad98
の10進値。
EDIT:
試み@JeffDavies方法:
GUID guid;
const OLECHAR aoleGuid[] = OLESTR("eec5ad98-8080-425f-922a-dabf3de3f69a");
std::cout << "GUID before : " << guid.Data1 << " " << guid.Data2 << " " << guid.Data3 << " " << guid.Data4 << std::endl;
CLSIDFromProgID(aoleGuid, &guid);
std::cout << "GUID after : " << guid.Data1 << " " << guid.Data2 << " " << guid.Data3 << " " << guid.Data4 << std::endl;
Iは、関数の前にGUIDのプリントを加え、私は同じ結果を有する:に従って
GUID before : 1505448 30982 184 `3À
GUID after : 0 0 0 i = 0
sGuidあなたはその 'c_str()' このようにキャストしたい場合は、 'wstringの' すべきです。 –
キャストがコンパイラに「あなたがいないところでさえ私がやっていることを知っていることを知っている」と言っているちょっとしたケース。デバッガで 'lpcGuid'を見たことがありますか?私はいくつかのランダムな中国語の文字列だと思う。 – MSalters
@MSaltersランダムに変換を行っていない、このスタックオーバーフローのコメントでそれを見た:http://stackoverflow.com/a/23973050/5271942 – sh5164