簡體   English   中英

如何將LPWSTR轉換為GUID?

[英]How do I convert a LPWSTR to a GUID?

我正在使用Windows 7音頻API,而且我已經碰壁了。

基本上,我需要一個IAudioSessionControl2 *並從中獲取一個ISimpleAudioVolume *。

現在,看起來我可以使用IAudioSessionControl2-> GetSessionInstanceIdentifier(...)的值來調用IAudioSessionManager-> GetSimpleAudioVolume( 請注意,這在文檔中並未完全拼寫出來,但它似乎是一種合理的行為。

問題,GetSimpleAudioVolume()接受GUID *和GetSessionInstanceIdentifier()吐出LPWSTR。 通過調試我已經確認GetSessionInstanceIdentifier()的返回值至少看起來像GUID。

那么,實際的問題是我如何將LPWSTR轉換為GUID? 我意識到如果我編組一些托管代碼並使用內置的GUID ,這是非常簡單的,但是必須采用C ++方式來實現這一點。


好吧,這些API肯定不像我在上面的文本轉儲中所說的那樣工作。 但是,String - > GUID的基本問題已經回答了,所以我不打算刪除這個問題。

嘗試CLSIDFromString CLSID實際上定義為:

typedef GUID CLSID;

因此,您可以使用CLSIDFromString生成GUID。 這是一些示例代碼:

LPWSTR guidstr;
GUID guid;

...

HRESULT hr = CLSIDFromString(guidstr, (LPCLSID)&guid);
if (hr != S_OK) {
    // bad GUID string...
    ...
}

警告

不是GUID的東西將作為有效GUID返回。 例如:

| String              | Returned Clsid                         |
|---------------------|----------------------------------------|
| "file"              | {00000303-0000-0000-C000-000000000046} | FileMoniker
| "AccessControlList" | {b85ea052-9bdd-11d0-852c-00c04fd8d503} |
| "ADODB.Record"      | {00000560-0000-0010-8000-00AA006D2EA4} |
| "m"                 | {4ED063C9-4A0B-4B44-A9DC-23AFF424A0D3} | Toolbar.MySearchDial

這意味着除了返回您不期望的結果之外,該函數每次運行時都會命中注冊表。

簡短版本:不要使用CLSIDFromString。 相反,您可以以完全相同的方式使用IIDFromString

CLSIDFromString文檔現在指向StringFromGUID2(),它更易於使用......並且不認為該東西是CLSID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM