Вызвать вызов освобожденного COM-объекта. - PullRequest
3 голосов
/ 23 сентября 2011

Я создаю COM-объект, используемый для задач автоматизации какого-либо приложения. Когда это происходит, приложение запускается и отображается его главное окно.

Проблема возникает, когда пользователь закрывает главное окно приложения. Следующий вызов Invoke для COM-объекта не работает. Проблема в том, что он не выходит из строя и не сообщает об ошибке. Если я добавлю точку останова отладчика в следующую строку кода, она никогда не будет достигнута. Если я окружаю вызов Invoke командой try / catch, исключение не возникает. В сборке релиза он просто вылетает.

Как это должно работать? Поскольку я использую CComDispatchDriver в качестве оболочки для IDispatch *, я ожидаю, что мой AddRef будет поддерживать COM-объект живым, даже если пользователь закроет приложение. Я надеялся получить хотя бы немного HRESULT как ошибку.

1 Ответ

0 голосов
/ 13 октября 2011

Вероятно, произошло то, что ваше приложение CoUninitialize при выходе. CoUninitialize приводит к тому, что все COM-объекты отбрасываются, поэтому, если вы когда-либо будете взаимодействовать с COM-объектом после вызова CoUninitialize, вы получите сбой.

...