Vadon
|
|
|
|
|
Рег.: 29.09.2004
|
Сообщений: 518
|
|
Рейтинг: 436
|
|
VC++ COM Использовать библиотеку типов приложения
06.01.2007 19:12
|
|
|
Появилось задание разобраться в чужой библиотеке и подправить чуток, в итоге перечитал пару статей по COM но встал на одном моменте: не получается воспользоваться type library другого приложения
Подключаю библиотеку типов следующим образом:
#import "c:\projects\rgb\rgb.siebelcti\CCAconnect2\CCA.tlb" создает tlh файл в папке debug, но в class view проекта нет новых типов. Если же попытаться использовать например тип IApplicationPtr app_CCA;
(не совсем понял, как этот тип получается из IApplication, как-то так: _COM_SMARTPTR_TYPEDEF(IApplication, __uuidof(IApplication));)
так вот в этом случае все работает, и даже работает HRESULT hr = app_CCA.CreateInstance("CCA.Application"); что вызывает загрузку приложения при загрузке самой библиотеки
когда набираешь app_CCA-> даже выскакивает подсказка со всеми нужными функциями, которые я и хочу использовать, однако если попытаться вызвать любую из этих функций, например app_CCA->GetLine();
то вылезает ошибка error C2039: 'GetLine' : is not a member of 'IApplication'
Пробовал подключать tlh файл к проекту - не помогает.
|
|
Mike
|
Ызарг
|
|
|
|
Рег.: 02.11.2002
|
Сообщений: 8098
|
|
Рейтинг: 2147
|
|
Re: VC++ COM Использовать библиотеку типов приложения
[re: Vadon]
06.01.2007 22:37
|
|
|
Quote:
но в class view проекта нет новых типов
Программа под MFC? Попробуй импортировать библиотеку типов через class wizard.
|
|
Vadon
|
|
|
|
|
Рег.: 29.09.2004
|
Сообщений: 518
|
|
Рейтинг: 436
|
|
Re: VC++ COM Использовать библиотеку типов приложения
[re: Mike]
06.01.2007 22:40
|
|
|
Не, не на MFС судя по всему... говорит, что классы MFС можно добавлять только к проектам MFC (Я создавал ATL проект)
Как идея, может нужны специальные атрибуты при импорте библиотеки? Я попробовал несколько комбинаций, видимых изменений не заметил...
Редактировал Vadon (06.01.2007 22:47)
|
|
Mike
|
Ызарг
|
|
|
|
Рег.: 02.11.2002
|
Сообщений: 8098
|
|
Рейтинг: 2147
|
|
Re: VC++ COM Использовать библиотеку типов приложения
[re: Vadon]
06.01.2007 22:50
|
|
|
Quote:
Как идея, может нужны специальные атрибуты при импорте библиотеки?
Ты писал no_namespace? Что будет, если написать? Может быть, IApplication определен в нескольких местах?
|
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31411
|
|
Рейтинг: 8952
|
|
Re: VC++ COM Использовать библиотеку типов приложения
[re: Vadon]
06.01.2007 22:54
|
|
|
возможная причина: конфликтуют имена типов( IApplication распространенное название)
интерфейсы из typelib скорее всего экспортируется в каком-нибудь namespace
соответственно VS при подсказках показывает один тип, а при компиляции подхватывается другой.
решение: аккуратно проверить под какими именами с какими namespace-ами экспортируется typelib
|
|
Vadon
|
|
|
|
|
Рег.: 29.09.2004
|
Сообщений: 518
|
|
Рейтинг: 436
|
|
Re: VC++ COM Использовать библиотеку типов приложения
[re: Mike]
06.01.2007 23:00
|
|
|
#import "c:\projects\rgb\rgb.siebelcti\CCAconnect2\CCA.tlb" no_namespace без видимых изменений.
В оригинальном проекте еще добавлялся файлик comsvcs.h и соответственно comsvcs.lib прописывался где-то в настройках проекта - может он имеет принципиальную важность? хотя мне он не помог =((
|
|
Vadon
|
|
|
|
|
Рег.: 29.09.2004
|
Сообщений: 518
|
|
Рейтинг: 436
|
|
Re: VC++ COM Использовать библиотеку типов приложения
[re: DarkGray]
06.01.2007 23:01
|
|
|
ну чтож, буду долбиться =)
|
|
Mike
|
Ызарг
|
|
|
|
Рег.: 02.11.2002
|
Сообщений: 8098
|
|
Рейтинг: 2147
|
|
Re: VC++ COM Использовать библиотеку типов приложения
[re: Vadon]
06.01.2007 23:18
|
|
|
Quote:
ну чтож, буду долбиться =)
Поищи, где вообще определен IApplication, текстовым поиском по всему проекту.
|
|
Vadon
|
|
|
|
|
Рег.: 29.09.2004
|
Сообщений: 518
|
|
Рейтинг: 436
|
|
Re: VC++ COM Использовать библиотеку типов приложения
[re: Mike]
06.01.2007 23:27
|
|
|
А как по всему проекту поискать?
go to definition на IApplicationPtr например выкидывает в CCA.tlh и хз сколько еще файлов реально подключены к проекту но не видны в solution explorer...
Ладно, разберусь, направление понятно, спасибо большое.
Редактировал Vadon (06.01.2007 23:32)
|
|
Mike
|
Ызарг
|
|
|
|
Рег.: 02.11.2002
|
Сообщений: 8098
|
|
Рейтинг: 2147
|
|
Re: VC++ COM Использовать библиотеку типов приложения
[re: Vadon]
07.01.2007 02:47
|
|
|
Quote:
А как по всему проекту поискать?
Far Manager'ом
|
|
sidaesc
|
journeyman
|
|
|
|
Рег.: 24.04.2006
|
Сообщений: 94
|
|
Рейтинг: 3
|
|
Re: VC++ COM Использовать библиотеку типов приложения
[re: Vadon]
07.01.2007 13:11
|
|
|
Quote:
подключены к проекту но не видны в solution explorer
#import "..." создает 2 файла
Это файл .tlh, содержащий описание классов, и файл .tli, который содержит реализацию членов классов
|
|
sidaesc
|
journeyman
|
|
|
|
Рег.: 24.04.2006
|
Сообщений: 94
|
|
Рейтинг: 3
|
|
Re: VC++ COM Использовать библиотеку типов приложения
[re: Vadon]
07.01.2007 13:18
|
|
|
Quote:
(не совсем понял, как этот тип получается из IApplication, как-то так: _COM_SMARTPTR_TYPEDEF(IApplication, __uuidof(IApplication));)
Это объявление эквивалентно следующему:
typedef _com_ptr_t<IApplication,&__uuidof(IApplication)> IApplicationPtr;
Quote:
когда набираешь app_CCA-> даже выскакивает подсказка со всеми нужными функциями, которые я и хочу использовать, однако если попытаться вызвать любую из этих функций, например app_CCA->GetLine();
то вылезает ошибка error C2039: 'GetLine' : is not a member of 'IApplication'
а GetLine точно член IApplication?? ведь у _com_ptr_t есть метод IApplication* operator->() const throw(_com_error);
|
|