在最简单的情况下,COM 包装类将公开一个或多个您希望提供给使用 VBA 等编程环境的开发人员的函数。同样,您可以选择在 COM DLL 中包含 ObjectARX 代码,或者为 COM 和 ObjectARX 组件创建单独的 DLL。以下各节提供了解释所需过程的过程。 为 ObjectARX 应用程序创建自动化包装项目
#include "dbmain.h"
#include "acad24.h"
#include "axtempl.h" // main ActiveX Automation template // header file
通过将以下声明添加到其派生列表的末尾来更改 COM 类的派生: public IRetrieveApplicationImpl 将以下条目添加到:COM_MAP COM_INTERFACE_ENTRY(IRetrieveApplication) 在 IDL 文件中,在 and 之后添加以下代码:importlib("stdole32.tlb")importlib("stdole2.tlb") importlib("acax24enu.tlb"); // revise the path to match your
// own AutoCAD installation
请确保替换与 AutoCAD 安装匹配的路径。 设置包装器后,您需要提供接口以通过 ActiveX 公开您的功能。 通过 ActiveX 公开功能通过从“类视图接口”快捷菜单中选择“添加方法”或“添加属性”,将所需的 ActiveX 方法和属性添加到包装类中。在 COM 类 CPPfile 中,ATL 生成类似于以下内容的存根: STDMETHODIMP CAsdkSquareWrapper::get_Number(short *pVal) { } STDMETHODIMP CAsdkSquareWrapper::put_Number(short newVal) { } 通常,这些成员将用于包装对 ObjectARX 应用程序的调用。 将实现代码添加到新的 COM 类方法和属性。下面的示例演示一个示例属性实现: STDMETHODIMP CAsdkSquareWrapper::get_Number(short *pVal) { // TODO: Add your implementation code here AcDbObjectPointer<AsdkSquare> pSq(m_objId, AcDb::kForRead); if (pSq.openStatus() != Acad::eOk) return E_ACCESSDENIED; int id; pSq->squareId(id); *pVal = id; return S_OK; } STDMETHODIMP CAsdkSquareWrapper::put_Number(short newVal) { AcAxDocLock docLock(m_objId, AcAxDocLock::kNormal); if(docLock.lockStatus() != Acad::eOk) return E_ACCESSDENIED; AcDbObjectPointer<AsdkSquare> pSq(m_objId, AcDb::kForWrite); if (pSq.openStatus() != Acad::eOk) return E_ACCESSDENIED; pSq->setSquareId(newVal); return S_OK; } 根据生成和注册 COM DLL 中的步骤生成和注册应用程序。 |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-1-8 19:44
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.