我发现了this问题,但他们没有使用指针。
我有一个COM方法调用的方法,该方法需要一个指向bool的指针。此 bool(boolean) 值用于取消 call 者的长时间运行过程(如果需要,则可以进行录像)。
我可以以某种方式进行投射,但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的澄清后,我认为您正在尝试这样做。或可能接近的东西。
关于c++ - 如何将VARIANT_BOOL *转换为bool *,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23450926/