c++ ::CLSIDFromString
时间: 2024-05-04 17:19:13 浏览: 18
`CLSIDFromString` 是一个 Windows API 函数,用于将字符串形式的 CLSID(Class ID) 转换为对应的 GUID(Globally Unique Identifier)。在 C++ 中,可以使用该函数来实现 COM(Component Object Model)组件的创建和操控。
函数签名如下:
```c++
HRESULT CLSIDFromString(
LPCOLESTR lpsz,
LPCLSID pclsid
);
```
其中,`lpsz` 参数为输入的字符串形式 CLSID,`pclsid` 参数为输出的 GUID。
示例代码如下:
```c++
#include <windows.h>
int main()
{
CLSID clsid;
LPCOLESTR clsidStr = L"{00000000-0000-0000-0000-000000000000}"; // 字符串形式 CLSID
HRESULT hr = CLSIDFromString(clsidStr, &clsid); // 转换为 GUID
if (SUCCEEDED(hr))
{
// 成功转换,可以使用 clsid 来创建 COM 组件实例或执行其他操作
}
else
{
// 转换失败,处理错误
}
return 0;
}
```
相关问题
无法将参数 1 从“LPCWSTR”转换为“CLSID”
如果在使用上述示例代码时出现了“无法将参数 1 从‘LPCWSTR’转换为‘CLSID’”的编译错误,可能是因为 `AssocCreate` 函数的第二个参数应该是 `CLSID` 类型,而不是 `LPCWSTR` 类型。在这种情况下,你需要使用 `CLSIDFromString` 函数将字符串转换为 `CLSID`,并将其作为 `AssocCreate` 函数的第二个参数,如下所示:
```c++
#include <Windows.h>
int main()
{
LPCWSTR extension = L".txt"; // 文件扩展名
LPCWSTR appName = L"C:\\Windows\\notepad.exe"; // 应用程序路径
// 设置默认程序
HKEY hKey;
CLSID clsid;
HRESULT result = CLSIDFromString(L"text", &clsid);
if (SUCCEEDED(result))
{
result = AssocCreate(extension, clsid, &hKey);
if (SUCCEEDED(result))
{
result = RegSetValueEx(hKey, L"", 0, REG_SZ, (BYTE*)appName, (lstrlen(appName) + 1) * sizeof(wchar_t));
if (SUCCEEDED(result))
{
result = SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);
if (SUCCEEDED(result))
{
// 设置成功
}
}
RegCloseKey(hKey);
}
}
return 0;
}
```
这个示例代码调用了 `CLSIDFromString`、`AssocCreate`、`RegSetValueEx` 和 `SHChangeNotify` 函数来分别设置文件类型、默认程序和刷新Shell通知。你可以修改 `extension` 和 `appName` 变量来设置不同的文件类型和默认程序。同样需要以管理员权限运行该程序才能修改默认程序。
判断WCHAR字符串是否为guid
可以使用Windows API中的CLSIDFromString函数来判断WCHAR字符串是否为GUID。如果函数返回S_OK,则说明该字符串是GUID格式,否则不是。
示例代码:
```c++
#include <windows.h>
bool IsGuid(const wchar_t* str)
{
GUID guid;
return SUCCEEDED(CLSIDFromString(str, &guid));
}
```
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)