如何将VARIANT_BOOL*转换为bool*

How to convert VARIANT_BOOL* to bool*

本文关键字:转换 bool BOOL VARIANT      更新时间:2023-10-16

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

我有一个方法,我的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

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的澄清,我认为这就是你想要做的。或者更接近于它