如何将VARIANT_BOOL *转换为bool *

时间:2014-05-03 23:33:45

标签: c++ pointers com

我发现了this个问题,但他们没有使用指针。

我有一个方法,我的COM方法调用,需要一个指向bool的指针。此bool用于取消来自呼叫者的长时间运行过程(视频录制,如果您必须知道)。

我可以以某种方式投射它,但仍然有VARIANT_BOOL等于FALSE,反之亦然吗?

代码

HRESULT YourObject::YourComMethod(VARIANT_BOOL* pVarBool)
{
    callYourNonComMethodHere((bool*)pVarBool);
    return S_OK;
}

更新

所以,我了解到,尽管你可以将COM参数作为指针,但它们没有用处。这实际上并没有引用来自调用者的指针。

所以,我要做的是创建一个完全独立的COM对象,即CancellationToken。然后,在我的实现中,我可以调用token.Cancel(),然后YourComMethod将具有更新的bool,表示长时间运行的方法应该取消。

我创建了一个示例项目来演示如何使用包装COM对象将指针传递给bool。

https://bitbucket.org/theonlylawislove/so-blocking-com-call/src

1 个答案:

答案 0 :(得分:4)

如果正确完成,

VARIANT_BOOL 假设是两个值中的一个。 VARIANT_TRUE或VARIANT_FALSE。在关闭机会时,一些尼安德特人不明白,在那里我所有的错误的COM代码我通常认为如果它不是VARIANT_FALSE,那么它必须是真的。

所以:

HRESULT YourObject::YourComMethod(VARIANT_BOOL* pVarBool)
{
    bool bval = (*pVarBool != VARIANT_FALSE); // do this if pVarBool is [in,out]
    // bool bval = false; // otherwise do this if pVarBool is [out] only.

    callYourNonComMethodHere(&bval);
    *pVarBool = bval ? VARIANT_TRUE : VARIANT_FALSE;
    return S_OK;
}

经过Matt的一点澄清,我这就是你想要做的事情。或者可能接近它的东西。