Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Подключится к COM-обьекту (SolidWorks) в ATL-проекте

40K
10 июля 2009 года
hztp_serg
25 / / 10.07.2009
Пытаюсь с помощью ATL-проекта создать COM-обьект, в котором нужно вызывать методы COM-обьекто (SolidWorks). Опыта работы с VC++ меньше двух недель. На основе простого примера получилось создать ATL-проект, добавить туда класс, переменные, методы, ну и вызвать их на клиенте. Теперь задача стоит реализовать подключение подключение COM-обьекта SolidWorks. В описании этого COM-обьекта есть примеры на C++, например:
'--------------------------------

'

' Preconditions: Part is open and has a configuration named aaa.

'

' Postconditions: None

'

'---------------------------------

#define USING_DEBUG_SOLIDWORKS TRUE

#ifdef _DEBUG && USING_DEBUG_SOLIDWORKS

#define AFX_MANAGE_STATE_ADDIN AFX_MANAGE_STATE(AfxGetAppModuleState());

#else

#define AFX_MANAGE_STATE_ADDIN AFX_MANAGE_STATE(AfxGetStaticModuleState());

#endif

// -------------------------------------------------------------------

STDMETHODIMP CAPITestATL::API_Test(void)

{

AFX_MANAGE_STATE_ADDIN;

HRESULT hr = S_OK;

CComPtr <ISldWorks> pSldWorks;

CComPtr <IModelDoc2> pModel;

CComPtr <IConfigurationManager> pCfgMgr;

CComBSTR sCfgName(_T("aaa"));

long NumParams = 0;

long i = 0;

BSTR *vNames = NULL;

BSTR *vValues = NULL;

VARIANT_BOOL bret = VARIANT_FALSE;

try

{

// Connect to SolidWorks

ASSERT(m_iSldWorks);

hr = m_iSldWorks->get_IActiveDoc2(&pModel);

ASSERT(pModel);

hr = pModel->get_ConfigurationManager(&pCfgMgr);

ASSERT(pCfgMgr);

hr = pCfgMgr->GetConfigurationParamsCount(sCfgName, &NumParams);

ASSERT(NumParams > 0);

vNames = new BSTR[NumParams]; ASSERT(vNames );

vValues = new BSTR[NumParams]; ASSERT(vValues);

hr = pCfgMgr->IGetConfigurationParams(sCfgName, NumParams, vNames, vValues, &bret);

ASSERT(bret);

for (i = 0; i < NumParams; i++)

{

CComBSTR sName ;

CComBSTR sValue;



sName .Attach(vNames );

sValue.Attach(vValues);

OutputDebugString(sName );

OutputDebugString(_T("\n"));

OutputDebugString(sValue);

OutputDebugString(_T("\n"));

}

delete [] vNames ;

delete [] vValues ;

}

catch (...)

{

DebugBreak();

}

delete [] vNames ;

delete [] vValues ;

return S_OK;

}
в моём проете этот пример конечно сразу не заработает. Сначала просто вставляю переменную, которая будет ссылкой на COM-обект:
private:
CComPtr <ISldWorks> pSldWorks
получаю ошибку:

swcom.h(101) : error C2065: ISldWorks: необъявленный идентификатор

Обьясните пожалйста какую последовательность действий нужно сделать чтобы подключить COM-обект? На форуми нашол темы которые касаются COM-обьекта SolidWorks, одной из них автором был oxotnik333, если вы прочтёте мой вопрос, поделитись пожалуйста пример. Большое спасибо!
11
10 июля 2009 года
oxotnik333
2.9K / / 03.08.2007
у солида на офф сайте есть замечательный пример как подключать свой плагин и как в нем подписываться на события. В свое время делал, если время ждет могу через недельку другую выложить (на работе все осталось)
40K
10 июля 2009 года
hztp_serg
25 / / 10.07.2009
Цитата: oxotnik333
у солида на офф сайте есть замечательный пример как подключать свой плагин и как в нем подписываться на события. В свое время делал, если время ждет могу через недельку другую выложить (на работе все осталось)



Счас гляну у солида на офф сайте. Если вам не будет трудно выложите сдесь, или мне на hztp_serg at ukr dot net пусть будет через неделю, или когда вам выйдет. Поак буду разбиратся.

40K
10 июля 2009 года
hztp_serg
25 / / 10.07.2009
У меня в новосозданом ATL-проекте файл stdafx.h имеет вид:

// stdafx.h: включаемый файл для стандартных системных включаемых файлов
// или включаемых файлов для конкретного проекта, которые часто используются,
// но не часто изменяются

#pragma once

#ifndef STRICT
#define STRICT
#endif

#include "targetver.h"

#define _ATL_APARTMENT_THREADED
#define _ATL_NO_AUTOMATIC_NAMESPACE

#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // некоторые конструкторы CString будут явными

#include "resource.h"
#include <atlbase.h>
#include <atlcom.h>
#include <atlctl.h>

using namespace ATL;

В примере который реализует подключение к COM-обьекта SolidWorks этот файл имеет:

#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;

В VS2008 ATL-проекте это всё ручками надо прописывать, или или этот код автоматом генерится при добавлении интерфейса или какого-то класса связаного с COM-обьектом SolidWorks? Если автоматом, то что нужно для этого сделать? Большое спасибо!
11
10 июля 2009 года
oxotnik333
2.9K / / 03.08.2007
не обязательно делать импорт интерфейсов в stdafx.h. Делай его там где это необходимо.
Я писал все руками (поначалу) потом как достало меня это разбирательство взял и переделал их пример под свои нужды (выкинул все что не надо и добавил своего)
40K
10 июля 2009 года
hztp_serg
25 / / 10.07.2009
Обьявил переменную:
CComPtr<ISldWorks> iSwApp
как проверить, содержит ли эта переменная ссылку на обьект?
11
10 июля 2009 года
oxotnik333
2.9K / / 03.08.2007
Цитата: hztp_serg
Обьявил переменную:
CComPtr<ISldWorks> iSwApp
как проверить, содержит ли эта переменная ссылку на обьект?


сама по себе после объявления не содержит
надо через CoCreateInstance если не через плагин, если через плагин то там автоматом солид подгружает его и передает ссылку на свой интерфейс

40K
10 июля 2009 года
hztp_serg
25 / / 10.07.2009
Цитата: oxotnik333
сама по себе после объявления не содержит
надо через CoCreateInstance если не через плагин, если через плагин то там автоматом солид подгружает его и передает ссылку на свой интерфейс



где можно посмотреть как через плагин подгрузить COM-обьект в ATL-проект?

11
10 июля 2009 года
oxotnik333
2.9K / / 03.08.2007
Цитата: hztp_serg
где можно посмотреть как через плагин подгрузить COM-обьект в ATL-проект?


ну скачай же пример этого плагина (в хелпе к АПИ есть даже вроде как прямая ссылка)
PS: при компиляции он сам в реестр все вносит, и руками ничего регистрировать не надо

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог