Как передать адрес BOOL методу, принимающему адрес VARIANT_BOOL?

У меня есть метод, который принимает параметр VARIANT_BOOL указатель

STDMETHOD(get_Test)(VARIANT_BOOL* result)

у меня тоже есть BOOL тестовая переменная, которую я хочу передать в этот метод. Должно быть BOOL и не VARIANT_BOOL,

BOOL test;

Есть ли способ передать адрес BOOL вместо адреса VARIANT_BOOL? Я старался

get_Test( &((VARIANT_BOOL)test));

но это не сработало.

2

Решение

Эти типы имеют разные размеры и используют разные значения для ИСТИНА. Приведение может сработать, если вы инициализируете значение, поэтому верхнее слово будет нулевым. Но только не делайте этого, а делайте так:

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

Другие решения

Решение состоит в том, что вы не должны использовать приведение для этого, потому что BOOL определяется по типу int а также VARIANT_BOOL определяется по типу short и поэтому они, скорее всего, будут иметь разные размеры. Объявить VARIANT_BOOL переменной и передайте ее адрес, затем интерпретируйте результат.

3

По вопросам рекламы [email protected]