Попробуйте:
HRESULT IsValid([out, retval] VARIANT_BOOL *bValid);
Чтобы работать как выход, он должен быть указателем на значение; вот как это будет написано на стороне C ++:
*bValue = VARIANT_TRUE;
Я не знаю, можете ли вы написать тип как boolean
- я только когда-либо видел, чтобы VARIANT_BOOL
использовался.
На стороне C # оно станет эквивалентным:
public bool IsValid()
Другими словами, вызываемая оболочка во время выполнения (RCW) реализует «более приятную» версию сигнатуры метода и позаботится о небезопасном переводе. Если реализация C ++ возвращает E_FAIL
(или E_WHATEVER
), тогда метод RCW выдаст ComException
.
Вы можете также рассмотреть возможность добавления атрибута [propget]
, который сделает IsValid
доступным как свойство вместо метода. Как и с любым свойством, делайте это только в том случае, если его анализ дешевый и не имеет побочных эффектов (отладчик будет оценивать его при прохождении кода C #).