C++ 如何将BOOL的地址传递给接受VARIANT\u BOOL地址的方法?

C++ 如何将BOOL的地址传递给接受VARIANT\u BOOL地址的方法?,c++,com,com-interop,C++,Com,Com Interop,我有一个方法,它采用VARIANT\u BOOL指针的参数 STDMETHOD(get_Test)(VARIANT_BOOL* result) 我还有一个BOOL测试变量要传递到该方法中。它必须是BOOL,而不是VARIANT\u BOOL BOOL test; 有没有办法用BOOL的地址代替VARIANT\u BOOL的地址?我试过了 get_Test( &((VARIANT_BOOL)test)); 但这不起作用。解决方案是,您不应该为此使用强制转换,因为BOOL的类型定义为

我有一个方法,它采用
VARIANT\u BOOL
指针的参数

STDMETHOD(get_Test)(VARIANT_BOOL* result) 
我还有一个
BOOL
测试变量要传递到该方法中。它必须是
BOOL
,而不是
VARIANT\u BOOL

BOOL test;
有没有办法用
BOOL
的地址代替
VARIANT\u BOOL
的地址?我试过了

get_Test( &((VARIANT_BOOL)test));

但这不起作用。

解决方案是,您不应该为此使用强制转换,因为
BOOL
的类型定义为
int
,而
VARIANT\u BOOL
的类型定义为
short
,因此它们很可能具有不同的大小。声明一个
VARIANT\u BOOL
变量并传递其地址,然后解释结果。

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

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

你确定这个问题是关于C++吗?C++在哪里?这看起来像C++,所以我已经改变了标题和标签。你也可能要提到的是,值<代码> ValueIsPoOL 使用的是真(<代码> ValueToalEng/<代码>)是<代码> -1 < /C>,而不是<代码> 1 < /C>。