C ++ dynamic_cast с видимым объектом C # com

У меня есть старый компонент COM в C ++ / ATL (Active Template Library), который использует dynamic_cast для преобразования интерфейса COM в класс C ++, который реализует интерфейс.

Если преобразование невозможно, dynamic_cast возвращает указатель NULL.

Теперь у меня есть новая реализация того же COM-интерфейса в видимом компоненте C #.

Когда оператор dynamic_cast применяется к COM-объекту из C #, я ожидаю, что он вернет NULL, но на самом деле он выдает исключение (я понятия не имею, что такое исключение).

Я, конечно, могу обернуть dynamic_cast в блок try / catch, но это нормальное поведение?

-2

Решение

Я думаю, что MGetz дал правильную информацию.

dynamic_cast опирается на информацию о типе времени выполнения (RTTI). Это означает, что он может работать только в однородном проекте, где весь код компилируется одним и тем же компилятором (с использованием одних и тех же параметров компилятора).

Если я отключаю RTTI, я получаю

warning C4541: 'dynamic_cast' used on polymorphic type 'IMyInterfaceName' with /GR-;
unpredictable behavior may result

По сути, мы можем расширить это, сказав, что dynamic_cast в вызываемой оболочке COM (CCW) объекта C # также приводит к непредсказуемому поведению.

Лучше вообще избегать dynamic_cast.

0

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

Других решений пока нет …