2012-02-20 6 views
0

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

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

ответ

0

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

0

Это звучит, как вы изменили свой интерфейс, так как строительство своего клиента.

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

Смежные вопросы