ATL 如何将 BSTR* str 转换为注册表项。 SetValue(LPCTSTR str 类型

Posted

技术标签:

【中文标题】ATL 如何将 BSTR* str 转换为注册表项。 SetValue(LPCTSTR str 类型【英文标题】:ATL how to Convert BSTR* str to registry key.SetValue(LPCTSTR str type 【发布时间】:2011-12-01 02:01:38 【问题描述】:

我已经好几年没有做 C++ 了,更不用说 ATL 代码了

我有这种方法需要手术帮助:(

这是一个移动应用程序,所以我不想使用 CString 和 MFC

我需要将 BSTR* str 转换为正确的类型 LPCTSTR 以便在注册表 Set.Value 方法中使用

STDMETHODIMP CAXSampleCtl::SendMSG(BSTR* str)

    CRegKey key;

    key.Create(HKEY_LOCAL_MACHINE, _T("MyKeyName"));

    key.SetValue( str <<<--- nope, _T("MyValueName"));

    key.Flush();

    key.Close();

    return S_OK;

【问题讨论】:

为什么不直接用 UNICODE #defined 编译? 【参考方案1】:

COLE2T 宏只适合您,请参阅String Conversion Classes and Macros

要转换为 BSTR,请将现有字符串传递给 CComBSTR。要从 BSTR 转换,请使用 COLE2[C]DestinationType[EX], 比如 COLE2T。

【讨论】:

以上是关于ATL 如何将 BSTR* str 转换为注册表项。 SetValue(LPCTSTR str 类型的主要内容,如果未能解决你的问题,请参考以下文章

BSTR 到 std::string (std::wstring) 反之亦然

将 LPWST 转换或转换为 BSTR

如何将_bstr_t转换为CString

ATL接口返回类型&&ATL接口返回字符串BSTR*

运算符 TYPE () 并获取对象的地址

如何最好地将 CString 转换为 BSTR 以将其作为“in”参数传递给 COM 方法?