У меня есть метод, который принимает параметр VARIANT_BOOL
указатель
STDMETHOD(get_Test)(VARIANT_BOOL* result)
у меня тоже есть BOOL
тестовая переменная, которую я хочу передать в этот метод. Должно быть BOOL
и не VARIANT_BOOL
,
BOOL test;
Есть ли способ передать адрес BOOL
вместо адреса VARIANT_BOOL
? Я старался
get_Test( &((VARIANT_BOOL)test));
но это не сработало.
Эти типы имеют разные размеры и используют разные значения для ИСТИНА. Приведение может сработать, если вы инициализируете значение, поэтому верхнее слово будет нулевым. Но только не делайте этого, а делайте так:
VARIANT_BOOL temp;
HRESULT hr = get_Test(&temp);
if (SUCCEEDED(hr)) {
BOOL test = temp != VARIANT_FALSE;
// etc...
}
Решение состоит в том, что вы не должны использовать приведение для этого, потому что BOOL
определяется по типу int
а также VARIANT_BOOL
определяется по типу short
и поэтому они, скорее всего, будут иметь разные размеры. Объявить VARIANT_BOOL
переменной и передайте ее адрес, затем интерпретируйте результат.