Com 布尔的C变量?

Com 布尔的C变量?,com,atl,variant,bstr,Com,Atl,Variant,Bstr,我正在编写一个ATL库(我在这方面很新),我有一个函数,我想返回BSTR和VARIANT\u BOOL。我的函数如下所示: STDMETHODIMP myClass::GetResult(BSTR* myString, VARIANT_BOOL* contains) { std::pair<BSTR, bool> result = outQ.deQ(); CComBSTR stringOut(result.first); CComVariant cont(re

我正在编写一个ATL库(我在这方面很新),我有一个函数,我想返回
BSTR
VARIANT\u BOOL
。我的函数如下所示:

STDMETHODIMP myClass::GetResult(BSTR* myString, VARIANT_BOOL* contains) {
    std::pair<BSTR, bool> result = outQ.deQ();
    CComBSTR stringOut(result.first);
    CComVariant cont(result.second);
    *myString= stringOut.Detach();
    // this doesn't work, and I honestly don't know how to make it work
    //*contains = cont.Detach(contains);
    return S_OK;
}
STDMETHODIMP myClass::GetResult(BSTR*myString,VARIANT\u BOOL*contains){
std::pair result=outQ.deQ();
CComBSTR断线(结果第一);
c变量cont(结果第二);
*myString=stringOut.Detach();
//这不管用,我真的不知道该怎么做
//*contains=继续分离(contains);
返回S_OK;
}
我想从C代码调用这个函数。我的函数只有在使用
BSTR
时才这样工作,而C#code得到了正确的值。我只是不知道如何返回
VARIANT\u BOOL
,因为没有
CComVariant\u BOOL
或其他任何东西


有什么想法吗?

为什么您觉得需要
cOMvariant
在这里?只是为了
*contains=result.second?VARIANT\u TRUE:VARIANT\u FALSE
*myString=result.first,就这点而言。我想
拆下它,就像我拆下BSTR@IgorTandetnik我告诉过你我在这方面很新,我知道我听上去真的很幼稚,但是它不应该分离,这样我就可以转移所有权了吗?一个简单的布尔值不涉及任何资源管理。没有什么可拥有的,因此也没有什么可转让的所有权<代码>BSTR
是另一回事。您当前的代码复制了由
deQ
返回的
BSTR
,并将该副本的所有权转移给调用者。我不清楚原著发生了什么,谁现在拥有它;我怀疑它被泄露了。
BSTR
只是
wchar\u t*
的一个typedef,一个哑指针。它不能神奇地摧毁自己。因此需要像
CComBSTR
这样的智能包装。为什么您觉得需要
CComVariant
?只是为了
*contains=result.second?VARIANT\u TRUE:VARIANT\u FALSE
*myString=result.first,就这点而言。我想
拆下它,就像我拆下BSTR@IgorTandetnik我告诉过你我在这方面很新,我知道我听上去真的很幼稚,但是它不应该分离,这样我就可以转移所有权了吗?一个简单的布尔值不涉及任何资源管理。没有什么可拥有的,因此也没有什么可转让的所有权<代码>BSTR
是另一回事。您当前的代码复制了由
deQ
返回的
BSTR
,并将该副本的所有权转移给调用者。我不清楚原著发生了什么,谁现在拥有它;我怀疑它被泄露了。
BSTR
只是
wchar\u t*
的一个typedef,一个哑指针。它不能神奇地摧毁自己。因此需要像
CComBSTR
这样的智能包装器。