Как я могу бросить gcrootв IMyInterface в C ++. net? - PullRequest
5 голосов
/ 14 октября 2010

Мне нужно сделать некоторые странные вещи с gcroot, но я получаю следующую ошибку на динамической линии приведения: «не могу использовать« dynamic_cast »для преобразования из« gcroot »в« IMyInterface ^ ».легко привести общий объект к любому интерфейсу. Вы можете получить ошибку времени выполнения, если объект не реализует интерфейс, но он скомпилируется.

gcroot<Object^> m_pDataObject;
IMyInterface obj = dynamic_cast<IMyInterface^>(m_pDataObject);

Ответы [ 2 ]

10 голосов
/ 14 октября 2010

Это работает (компилируется) и должно делать то, что вы хотите (модуль заменяет IDisposable на требуемый интерфейс):

gcroot<Object^> m_pDataObject;
Object^ obj = m_pDataObject;     // implicit conversion from gcroot<>
IDisposable^ intf = dynamic_cast<IDisposable^>(obj);    // or safe_cast<>
6 голосов
/ 14 октября 2010

gcroot <> - это умный указатель. Вы можете разыграть, чтобы получить из него маркер трекинга:

IMyInterface^ itf = dynamic_cast<IMyInterface^>((Object^)m_pDataObject);

Кстати, Стив тоже в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...