加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

VB.NET调用ARX程序创建的COM Server

发布时间:2020-12-16 23:20:37 所属栏目:大数据 来源:网络整理
导读:首先,我们看如何用VS 2005(英文)来创建一个ARX COM Server并暴露一个接口供后面的程序调用。 新建一个工程,选择用ObjectARX向导创建工程,取名字为comServerFromArx,按OK按钮。 在出现的对话框中左边选项中选择COM Options,在右边的选项中选择使用ATL来

首先,我们看如何用VS 2005(英文)来创建一个ARX COM Server并暴露一个接口供后面的程序调用。

  1. 新建一个工程,选择用ObjectARX向导创建工程,取名字为comServerFromArx,按OK按钮。

  1. 在出现的对话框中左边选项中选择COM Options,在右边的选项中选择使用ATL来实现COM Server,按Finish按钮。

  1. 在工程上点右健菜单选择Add->Class…菜单命令。

  1. 在左边选择ATL,右边选择ATL Simple Object,按Add按钮继续。

  1. 再输入接口的名称,例如myCustomCom(如下图),按Finish按钮退出。

至此,一个ARX COM Server和一个接口已经创建好了。现在给我们的接口增加一个函数getPosition。

  1. 在接口ImyCustomCom上面点鼠标右健->Add->Add Method…菜单命令。

  1. 如下图,依次填入函数名称和参数信息,按下面的Finish退出。

  1. 现在如果你搜索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(库文件)文件夹的路径。编译工程,成功通过为止。

  1. 最后一步是到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。

  1. 创建一个VB.NET的Windows Application程序,命名为comClient,按OK按钮退出。

  1. 一个带有一个Form1的Windows Application创建了。在Form1的界面上增加一个按钮。

  1. 鼠标双击Form1中的Button1,开始添加一些代码以实现调用我们前面创建的Com Server。下面是源代码:

上面的代码很简单,我想需要解释的一点,可能是,我们不能通过new myCustomCom来创建这个Com接口,因为我们的ARX程序是一个AutoCAD的插件,也就是说是一个进程内(in-process)的Com Server,必须通过AcadApplication的GetInterfaceObject来获取。

  1. 按F5执行该程序,结果会看到一个消息框显示程序从Com Server的接口中获取的数据。

就这么简单!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读