Здравствуйте, ekamaloff, Вы писали:
E>Для того, чтобы ты мог использовать AutoCAD в качестве Automation сервера, следует предварительно сымпортировать его библиотеку типов в твой проект. Один из наиболее простых путей — это использование директивы #import (можешь почитать статью "Директива #import"Автор(ы): Игорь Ткачёв
Дата: 9.03.2001
В данной статье приводится объяснение работы директивы #import
компилятора Visual C++ и даны примеры её использования с
MS Word, MS Excel, ADO DB и ActiveX Control.
). В качестве filename можешь использовать например ProgID ("progid:AutoCAD.Application") или путь к главному исполняемому файлу AutoCAD-a (обычно библиотеки типов лежат в них).
я сделал импорт acad.tlb — у меня AutoCAD2000
Вот мой код:
void CTestACADDlg::OnACAD()
{
using namespace AutoCAD;
::CoInitialize(NULL);
try
{
CLSID clsid ;
_com_util::CheckError(CLSIDFromProgID (L"AutoCAD.Application", &clsid));
IAcadApplicationPtr pApp;
if (FAILED(pApp.GetActiveObject(clsid)))
{
_com_util::CheckError(pApp.CreateInstance(clsid));
}
pApp->put_Visible(VARIANT_TRUE);
IAcadDocumentsPtr pDocs;
_com_util::CheckError(pApp->get_Documents(&pDocs));
IAcadDocumentPtr pDoc;
//_com_util::CheckError(pDoc = pDocs->Open(_bstr_t("c:\\downtown.dwg"),_variant_t(false)));
pDoc = pDocs->Add();
IAcadModelSpacePtr modsp;
modsp = pDoc->GetModelSpace();
IAcadCirclePtr circle;
double center[]={100,100,0};
COleSafeArray saCenter;
saCenter.CreateOneDim(VT_R8,3,center);
circle= modsp->AddCircle(saCenter,50);
IAcadEntityPtr entity;
entity =(IAcadEntityPtr)circle;
IAcadHatchPtr Hatch;
Hatch= modsp->AddHatch(0,"ANSI31",TRUE);
SAFEARRAY* sa;
sa = SafeArrayCreateVectorEx(VT_DISPATCH,0,1,(void*)&IID_IDispatch);
sa->fFeatures = FADF_DISPATCH | FADF_HAVEIID | FADF_FIXEDSIZE;
IDispatch* pIAcadEntity;
HRESULT hr;
hr = entity->QueryInterface(IID_IAcadEntityPtr,(void **)&pIAcadEntity);
if (FAILED(hr)) return;
long idx[1] = {0};
hr = SafeArrayPutElement(sa,idx,pIAcadEntity);
if (FAILED(hr)) return;
VARIANT ConturArray;
VariantInit(&ConturArray);
ConturArray.vt = VT_ARRAY|VT_DISPATCH|VT_BYREF;
ConturArray.pparray = &sa;
hr = Hatch->AppendOuterLoop(ConturArray);
if (FAILED(hr)) return;
pIAcadEntity->Release();
SafeArrayDestroy(sa);
}
catch(const _com_error e)
{
// if (e.ErrorMessage()!=NULL) acutPrintf("Error: %s",e.ErrorMessage());
}
::CoUninitialize();
}