Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / как удалить интерфейсный method из ATL COM AppWazard проекта / 2 сообщений из 2, страница 1 из 1
16.03.2004, 11:33
    #32443098
zmeyka13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить интерфейсный method из ATL COM AppWazard проекта
Возникла проблема .... Я делаю COM объекты ... на основе проекта ATL COM AppWazard

Я добавляю интерфейсные методы с помощью Wizard-а. Через контекстное меню интерфейса (во вкладке ClassView) ... выбором опции Add Method.

Но в процессе моей работы ... в этих интерфейсных медодах меняется состав параметров... их типы и таму подобное.

В визорде я что то не смог найти функции изменения параметров интерфейсных функций.

Сначала я пробывал руками отредактировать .... ищу все где встречается моя интерфейсная функция и тама редактирую. Но к сожалению вроди проект компилируется ... но перестает линковатся.

Далее я попробывал удалить функции ... что бы потом добавить новую ... но опять такая же история .... уже не собирается ... выдает ошибки:

c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1827) : error C2259: 'CComObject<class Apt>' : cannot instantiate abstract class due to following members:
c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1823) : while compiling class-template member function 'long __stdcall ATL::CComCreator<class ATL::CComObject<class Apt> >::CreateInstance(void *,const struct _GUID &,void **
)'
c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1827) : warning C4259: 'long __stdcall IApt::OnHook(long)' : pure virtual function was not defined
d:\proj_kop\aptscriptn\aptscript.h(146) : see declaration of 'OnHook'
c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1823) : while compiling class-template member function 'long __stdcall ATL::CComCreator<class ATL::CComObject<class Apt> >::CreateInstance(void *,const struct _GUID &,void **
)'
c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1827) : error C2259: 'CComObject<class Apt>' : cannot instantiate abstract class due to following members:
c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1823) : while compiling class-template member function 'long __stdcall ATL::CComCreator<class ATL::CComObject<class Apt> >::CreateInstance(void *,const struct _GUID &,void **
)'
c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1827) : warning C4259: 'long __stdcall IApt::OnHook(long)' : pure virtual function was not defined
d:\proj_kop\aptscriptn\aptscript.h(146) : see declaration of 'OnHook'
c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(1823) : while compiling class-template member function 'long __stdcall ATL::CComCreator<class ATL::CComObject<class Apt> >::CreateInstance(void *,const struct _GUID &,void **
)'

По этому при изменении интерфейса теперь проиходится все создавать заново ... новый проект, и туда добавлять функции .... короче говоря полный ГЕМОРОЙ ....

Не подскажите ... можно ли решить эту задачу более просто. Визард умеет сам удалять интерфейсные методы ???? и если да - то как это сделать ???
...
Рейтинг: 0 / 0
16.03.2004, 12:32
    #32443273
Yet another cat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить интерфейсный method из ATL COM AppWazard проекта
Ха... Так ты на самом деле удаляешь из своего класса метод, реализующий метод соответствующего интерфейса. А метод как был в определении интерфейса, так и остается. Найди это определение и удали его оттуда. Находится в файле <имя проекта>.idl

Визард конечно помогает построить начальную структуру, но потом все надо делать руками. Это C++. Также и с изменением методов интерфейса. Если нужно изменить, например, его сигнатуру, то сначала нужно сделать это в idl-файле, а потом уже в методе класса C++.

Естественно нужно знать IDL (Interface Definition Language, в документации может еще обзываться как ODL - Object Description Language) и нужно знать, как определения на IDL транслируются при реализации интерфейсов на C++.

В общем, рекомендую почитать MSDN, раздел Component Development / Automation (в старом MSDN раздел называется Platform SDK / Component Services / Automation).

=====
Не дождетесь!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / как удалить интерфейсный method из ATL COM AppWazard проекта / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]