2013-09-04 1 views
2

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

STDMETHOD(get_Test)(VARIANT_BOOL* result) 

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

BOOL test; 

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

get_Test(&((VARIANT_BOOL)test)); 

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

+4

Вы уверены, что этот вопрос о C#? – hvd

+0

Где находится C++? –

+1

Это похоже на C++, поэтому я изменил название и тег. –

ответ

3

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

+0

Вы также можете указать, что значение 'VARIANT_BOOL' используется для true (' VARIANT_TRUE') - '-1', а не' 1'. –

4

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^