В ATL COM вызывается неверный метод - PullRequest
0 голосов
/ 20 февраля 2012

Я создал COM DLL, используя ATL.Когда я пытаюсь использовать его в неуправляемом C ++, я обнаруживаю переполнение буфера.В настоящее время я тестирую с помощью одного простого метода OnInitIDA (), и все, что я делаю в этом, - это оператор cout и return.Когда я запустил это, HRESULT вернул бы 0, однако это не вывело бы строку, которую я ожидал.Используя пошаговый переход к функциям отладчика, я обнаружил, что вместо того, чтобы вводить код для OnInitIDA при его вызове, он фактически перешел в другой метод с именем GetInclusionList.Как только я поместил оператор в этот метод и когда приложение было запущено, эта строка была распечатана.Кто-нибудь знает, почему будет вызван неправильный метод?

Если это поможет, мой код был размещен здесь: https://docs.google.com/open?id=0B3ehFEncKJH7ZDgxMGI1YjgtZTE2MS00ZTBkLWI2NzgtYzVhZjUxOWEzZGI0

Ответы [ 2 ]

0 голосов
/ 12 марта 2012

Я нашел ответ на свой вопрос.По сути, когда я создавал свой проект dll, он унаследовал от IDispatch, однако интерфейс, который я использовал в тестовом приложении, ожидал, что он унаследует от IUnknown.Это означало, что интерфейсы не совпадали, IDispatch наследовал от IUnknown и добавил ряд методов.Измените их, чтобы они соответствовали сработавшим DLL.

0 голосов
/ 20 февраля 2012

Звучит так, будто вы изменили свой интерфейс с момента создания вашего клиента.

Было бы неплохо очистить и восстановить все ваши проекты.

...