[英]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.