Вызов COM-обьекта в ATL-проекте
От: hztp_serg  
Дата: 10.07.09 12:40
Оценка:
Есть описание, что нужно сделать чтобы вызвать некий COM-обьект:
//Import the SolidWorks type library

#import "sldworks.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids

//Import the SolidWorks constant type library

#import "swconst.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids



int _tmain(int argc, _TCHAR* argv[])

{

//Initialize COM

CoInitialize(NULL);



//Use ATL smart pointers

CComPtr<ISldWorks> swApp;



//Create an instance of SolidWorks

HRESULT hres = swApp.CoCreateInstance(__uuidof(SldWorks), NULL, CLSCTX_LOCAL_SERVER);

.

. //Your code

.

//Shut down SolidWorks

swApp->ExitApp();



// Release COM reference

swApp = NULL;



//Uninitialize COM

CoUninitialize();



return 0;

}

Как включить в ATL-проект файлы sldworks.tlb и swconst.tlb? Как сделать возможным обьявить переменную CComPtr<ISldWorks> swApp;
у меня этот код выдаёт ошибку:
error C2065: ISldWorks: необъявленный идентификатор
Это всё нужно делать ручками или можно с помощью мастера? Большое спасибо!
Re: Вызов COM-обьекта в ATL-проекте
От: algol Россия about:blank
Дата: 10.07.09 13:33
Оценка:
Здравствуйте, hztp_serg, Вы писали:

_>Есть описание, что нужно сделать чтобы вызвать некий COM-обьект:

_>//Import the SolidWorks type library
_>#import "sldworks.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
_>//Import the SolidWorks constant type library
_>#import "swconst.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids

А сами tlb файлы у вас есть? #import ошибки не выдает?

_>у меня этот код выдаёт ошибку:

_>error C2065: ISldWorks: необъявленный идентификатор

Если библиотеки импортированы, то найдите в папке Debug/Release сгенерированные .tlh/.tli файлы и посмотрите объявлен ли там ISldWorks.
Re[2]: Вызов COM-обьекта в ATL-проекте
От: hztp_serg  
Дата: 10.07.09 16:28
Оценка:
Здравствуйте, algol, Вы писали:

A>Если библиотеки импортированы, то найдите в папке Debug/Release сгенерированные .tlh/.tli файлы и посмотрите объявлен ли там ISldWorks.


Импорт интерфейсов в stdafx.h:
#import "swpublished.tlb" raw_interfaces_only, raw_native_types, named_guids, auto_search
#import "sldworks.tlb" raw_interfaces_only, raw_native_types, named_guids, auto_search, rename("PropertySheet", "ShowPropertySheet"),rename("GetOpenFileName", "SWGetOpenFileName")
#import "swconst.tlb"

//SolidWorks TypeLibrary Versions
#define ID_SLDWORKS_TLB_MAJOR 14
#define ID_SLDWORKS_TLB_MINOR 0

#define ID_SWPUBLISHED_TLB_MAJOR 1
#define ID_SWPUBLISHED_TLB_MINOR 0

using namespace ATL;
using namespace SldWorks;
using namespace SWPublished;
using namespace SwConst;
Переменную добавил:
protected:
CComPtr<ISldWorks> iSwApp;
Это есть. Теперь надо загрузить COM-обьект, слышал что можно через CoCreateInstance или через плагин. Оба варианта для меня пока секрет, может подскажите какой вариант лучше выбрать и как его реализовать?
Большое спасибо!
Re[3]: Вызов COM-обьекта в ATL-проекте
От: _dimidrol_ Украина http://dimontest.narod.ru
Дата: 10.07.09 18:54
Оценка:
_>Теперь надо загрузить COM-обьект, слышал что можно через CoCreateInstance или через плагин. Оба варианта для меня пока секрет, может подскажите какой вариант лучше выбрать и как его реализовать?
_>Большое спасибо!

А этот код тебе чем не нравится?

//Create an instance of SolidWorks
HRESULT hres = swApp.CoCreateInstance(__uuidof(SldWorks), NULL, CLSCTX_LOCAL_SERVER);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.