用C++实现与AutoCAD的链接和通信

Linking and communication to AutoCAD in C++

本文关键字:链接 通信 AutoCAD C++ 实现      更新时间:2023-10-16

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

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

以下是一些示例代码,改编自微软的示例:

// 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;
}

如果您开始处理COM指针,您可能希望使用C#而不是C++,.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
}