我正在研究一个 COM dll。我希望将 BSTR 转换为 std::string 以传递给采用 const 引用参数的方法。
似乎使用 _com_util::ConvertBSTRToString() 来获取 BSTR 的 char* 等效项是一种合适的方法。但是,API 文档很少,并且实现可能存在错误:
http://msdn.microsoft.com/en-us/library/ewezf1f6(v=vs.100).aspx http://www.codeproject.com/Articles/1969/BUG-in-_com_util-ConvertStringToBSTR-and- _com_util
例子:
#include <comutil.h>
#include <string>
void Example(const std::string& Str) {}
int main()
{
BSTR BStr = SysAllocString("Test");
char* CharStr = _com_util::ConvertBSTRToString(BStr);
if(CharStr != NULL)
{
std::string StdStr(CharStr);
Example(StdStr);
delete[] CharStr;
}
SysFreeString(BStr);
}
使用 ConvertBSTRToString() 的替代方法的优缺点是什么,最好基于标准方法和类?