|
|
|
как удалить интерфейсный method из ATL COM AppWazard проекта
|
|||
|---|---|---|---|
|
#18+
Возникла проблема .... Я делаю 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 ** )' По этому при изменении интерфейса теперь проиходится все создавать заново ... новый проект, и туда добавлять функции .... короче говоря полный ГЕМОРОЙ .... Не подскажите ... можно ли решить эту задачу более просто. Визард умеет сам удалять интерфейсные методы ???? и если да - то как это сделать ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2004, 11:33 |
|
||
|
как удалить интерфейсный method из ATL COM AppWazard проекта
|
|||
|---|---|---|---|
|
#18+
Ха... Так ты на самом деле удаляешь из своего класса метод, реализующий метод соответствующего интерфейса. А метод как был в определении интерфейса, так и остается. Найди это определение и удали его оттуда. Находится в файле <имя проекта>.idl Визард конечно помогает построить начальную структуру, но потом все надо делать руками. Это C++. Также и с изменением методов интерфейса. Если нужно изменить, например, его сигнатуру, то сначала нужно сделать это в idl-файле, а потом уже в методе класса C++. Естественно нужно знать IDL (Interface Definition Language, в документации может еще обзываться как ODL - Object Description Language) и нужно знать, как определения на IDL транслируются при реализации интерфейсов на C++. В общем, рекомендую почитать MSDN, раздел Component Development / Automation (в старом MSDN раздел называется Platform SDK / Component Services / Automation). ===== Не дождетесь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2004, 12:32 |
|
||
|
|

start [/forum/topic.php?fid=57&tid=2035283]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
77ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 265ms |
| total: | 433ms |

| 0 / 0 |
