首先,我们看如何用VS 2005(英文)来创建一个ARX COM Server并暴露一个接口供后面的程序调用。
- 新建一个工程,选择用ObjectARX向导创建工程,取名字为comServerFromArx,按OK按钮。
- 在出现的对话框中左边选项中选择COM Options,在右边的选项中选择使用ATL来实现COM Server,按Finish按钮。
- 在工程上点右健菜单选择Add->Class…菜单命令。
- 在左边选择ATL,右边选择ATL Simple Object,按Add按钮继续。
- 再输入接口的名称,例如myCustomCom(如下图),按Finish按钮退出。
至此,一个ARX COM Server和一个接口已经创建好了。现在给我们的接口增加一个函数getPosition。
- 在接口ImyCustomCom上面点鼠标右健->Add->Add Method…菜单命令。
- 如下图,依次填入函数名称和参数信息,按下面的Finish退出。
- 现在如果你搜索getPosition函数,应该会得到三个结果:
即comServerFromArx.idl文件中的:
interface ImyCustomCom : IDispatch{
[id(1),helpstring("method getPosition")] HRESULT getPosition([out] FLOAT* X,[out] FLOAT* Y,[out] FLOAT* Z);
};
myCustomCom.h文件中的:
public:
STDMETHOD(getPosition)(FLOAT* X,FLOAT* Y,FLOAT* Z);
以及myCustomCom.cpp文件中的getPosition函数体。在该函数中给参数一些数据。这只是做个示范,没有实际意义。在现实工程中你可以调用ARX接口来实现更复杂的逻辑。
编译工程。应该一切都OK。如果你没有设置好头文件和库文件的地址,可以通过如下Tools->Optins->Projects and Solutions->VC++ Directories来简单的进行设置:
先选择Include files然后ObjectARX的inc(头文件)文件夹的路径,再依葫芦画瓢,选择Library files来增加ObjectARX的lib(库文件)文件夹的路径。编译工程,成功通过为止。
- 最后一步是到AutoCAD中加载我们的.arx程序——在命令行输入appload,找到上面编译了的.arx文件,加载文件。这一步会自动注册我们的Com接口(.tlb文件)。其实是ARX程序加载后通过执行CcomServerFromArxApp类中的RegisterServerComponents函数实现的。该函数如下:
virtual void RegisterServerComponents () {
//----- Self-register COM server upon loading.
if ( FAILED(::DllRegisterServer ()) )
acutPrintf (_RXST("Failed to register COM server./n")) ;
}
下一步,我们用VB.NET来制作一个Com Client。
- 创建一个VB.NET的Windows Application程序,命名为comClient,按OK按钮退出。
- 一个带有一个Form1的Windows Application创建了。在Form1的界面上增加一个按钮。
- 鼠标双击Form1中的Button1,开始添加一些代码以实现调用我们前面创建的Com Server。下面是源代码:
上面的代码很简单,我想需要解释的一点,可能是,我们不能通过new myCustomCom来创建这个Com接口,因为我们的ARX程序是一个AutoCAD的插件,也就是说是一个进程内(in-process)的Com Server,必须通过AcadApplication的GetInterfaceObject来获取。
- 按F5执行该程序,结果会看到一个消息框显示程序从Com Server的接口中获取的数据。
就这么简单!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。