gpt4 book ai didi

c++ - 如何将 VARIANT_BOOL* 转换为 bool*

转载 作者:行者123 更新时间:2023-11-30 01:53:06 26 4
gpt4 key购买 nike

我找到了 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

最佳答案

如果操作正确,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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com