Связывание и связь с AutoCAD в переполнении стека

Как я могу открыть приложение AutoCAD и отправить команды на это в C ++?
в VB это возможно благодаря CreateObject а также GetObject функции.

1

Решение

В C ++ вам нужно использовать CoCreateInstance вместо CreateObject а также CoGetObject вместо GetObject,

Вот пример кода, адаптированный из этого образец Microsoft:

// Initialize COM for this thread...
CoInitialize(NULL);

// Get CLSID for our server...
CLSID clsid;
HRESULT hr = CLSIDFromProgID(L"AutoCAD.Application", &clsid);

if(FAILED(hr)) {
return -1;
}

// Start server and get IDispatch...
IDispatch *pAcadApp;
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&pAcadApp);
if(FAILED(hr)) {
return -2;
}
4

Другие решения

Возможно, вы захотите использовать C # вместо C ++. Синтаксис .Net гораздо более дружественный, чем C ++, если вы начинаете работать с COM-указателями.

Вот пример. Вы всегда можете создать библиотеку .Net CLI и обернуть свой код C ++, чтобы использовать его из .Net.

void LaunchACAD()
{
try
{
//Connect to a running instance
AcadApp = (AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject(
"AutoCAD.Application");
}
catch(Exception ex)
{
// starts last run acad version
System.Type acType = System.Type.GetTypeFromProgID("AutoCAD.Application", true);

//  ("AutoCAD.Application.17.1"); // starts 2008
//  ("AutoCAD.Application.17.2"); // starts 2009

AcadApp = (AcadApplication)System.Activator.CreateInstance(acType);
}

AcadApp.Visible = true; // by the time this is reached AutoCAD is fully functional
}
0

По вопросам рекламы [email protected]