如何将BOOL的地址传递给接受VARIANT_BOOL地址的方法?

时间:2013-09-04 13:09:24

标签: c++ com com-interop

我有一个方法,它采用VARIANT_BOOL指针

的参数
STDMETHOD(get_Test)(VARIANT_BOOL* result) 

我还想要传递给该方法的BOOL测试变量。它必须是BOOL而不是VARIANT_BOOL

BOOL test;

是否有BOOL的传递地址代替VARIANT_BOOL的地址?我试过了

get_Test( &((VARIANT_BOOL)test));

但这没效果。

2 个答案:

答案 0 :(得分:4)

这些类型具有不同的大小,并使用不同的值为TRUE。如果初始化值使得高位字为零,则强制转换可以工作。但是,不要这样做,而是这样做:

VARIANT_BOOL temp;
HRESULT hr = get_Test(&temp);
if (SUCCEEDED(hr)) {
    BOOL test = temp != VARIANT_FALSE;
    // etc...
}

答案 1 :(得分:3)

解决方案是您不应该使用强制转型,因为BOOL已被int类型定义,而VARIANT_BOOL被定义为short,因此他们很可能会不同的尺寸。声明VARIANT_BOOL变量并传递其地址,然后解释结果。