在 C++ 中链接和通信到 AutoCAD

Linking and communication to AutoCAD in C++

如何在 C++ 中打开 AutoCAD 应用程序并向其发送命令?
VB 中,可以通过 CreateObjectGetObject 函数实现。

在 C++ 中,您需要使用 CoCreateInstance instead of CreateObject and CoGetObject 而不是 GetObject

这是一些示例代码,改编自此 sample of 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;
}

您可能希望使用 C# 而不是 C++,如果您开始处理 COM 指针,.Net 语法比 C++ 友好得多。

这是一个例子。您始终可以创建一个 .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
}