2011-09-29 51 views
2

以一个简单的例子:它作为参数传递时如何将_bstr_t转换为BSTR?

_bstr_t smartString(L"MyString"); 

Process(smartString); // takes BSTR. 

最初我想_bstr_t具有BSTR操作者从_bstr_t转换为BSTR,但是看着msdn没有定义这样的操作符。

将_bstr_t传递给BSTR参数或_variant_t传递给VARIANT时它是如何工作的?

回答

3

BSTRtypedef ED为WCHAR*(wtypes.h文件),而后者是typedef ED是wchar_t*(WINNT.H文件)和_bstr_t具有operator wchar_t*()成员变量。所以编译器只是使用该运算符进行转换。

0

如果我正确理解你的问题,你想调用一个期望BSTR *的方法。没有隐式转换。而是使用GetAddress()参数进行转换。

void foo(BSTR*) {...} 

void f() 
{ 
    _bstr_t myBstr; 
    foo(myBstr.GetAddress()); 
}