2011-03-10 8 views
2

среды: VS2008, C++ ATL COM, 64Bit Windows 7АТЛ: Не удается удалить метод из COM-интерфейса - всегда появляется, как волшебный

Я пытаюсь удалить метод из старой COM интерфейса. Я изменяю * .idl, изменяю связанные файлы * .h и * .cpp-реализации, а также удаляю их из файла .h-файла основного проекта. Я могу выполнить поиск по всему проекту для старого имени метода - не отображается и компилирует/ссылки отлично. Однако, если я затем использую Обозреватель объектов, чтобы посмотреть на скомпилированную DLL - метод dang все еще существует! Если я ссылаюсь на DLL в .NET-проекте - показывает метод. Если код .NET пытается использовать метод - он получает исключение памяти (что имеет смысл). Я не могу за всю жизнь понять, как изменить IDL, удалить код метода и получить результирующую скомпилированную DLL.

Где находится метод скрытия и существует ли другой способ удалить метод из существующего COM-интерфейса, созданного ATL? Я в тупике! Благодаря!

ответ

3

Вы отменили регистрацию старого модуля DLL и зарегистрировали новый? Похоже, ваш реестр может иметь несогласованную запись.

Также убедитесь, что предварительно скомпилированные заголовки и т. Д. Не лежат вокруг, поэтому, когда вы компилятор, вы уверены, что он не включил какую-то старую копию.

Возможно, лучше всего удалить полный каталог сборки (отладка/выпуск) перед компиляцией, если вы пропустили удаление некоторых старых файлов.

Проверьте также путь, в котором загружен .dll, вы можете видеть, что в обозревателе объектов сравните его с записью реестра. возможно, вы делали 32-битную версию раньше?

+1

VS2008 перезаписывает DLL после связывания. Если я использую браузер объектов для просмотра только что скомпилированной библиотеки DLL, показывает метод, который я удалил. Я думаю, что я удалю каталоги debug/release и посмотрю, что произойдет. – Dale