把VBA程序做成DLL在CAD调用 5

(原创)把VBA程序做成DLL、调用、调试。好久之前就做成DLL了,但是一直没有写下来。1.打开VB6,新建一个ActiveXDLL,然后添加一个模块,里面写上Publi... (原创)把VBA程序做成DLL、调用、调试。
好久之前就做成DLL了,但是一直没有写下来。
1.打开VB6,新建一个ActiveX DLL,然后添加一个模块,里面写上
Public acadApp As Object
Public ThisDrawing As Object
就是先定义两个CAD全局变量。使用Object的理由是不需要依赖CAD版本,也不需要引用CAD库。
2.然后找到默认的类模块Class1,在他的Initialize事件中写上如下内容:
Set acadApp = GetObject(, "AutoCAD.Application")
上面的意思是在连接使用DLL的时候,首先连接CAD。就这一行代码,为什么不写上出错代码,因为我认为,DLL是在acad中引用的,那这个时候ACAD已经启动了。使用GetObject就可以连上了,如果没有启动,那就谈不上使用这个DLL了。
3.以上已经连接到CAD了,那接下来就要让DLL提供个接口让外部调用啊。所以接下来要为DLL创建方法或者属性,举个我程序中的例子如下:
Public Function Start_CrYm()
'连接当前活动文档
Set ThisDrawing = acadApp.ActiveDocument
Form1.Show 1
End Function
这段程序表示,当在CAD中调用DLL的Start_CrYm时候,就显示 Form1,当然,这个 Form1也在你的DLL中,自己添加就是了。或者在这个Start_CrYm函数下面写什么都随自己。自己可以把自己的VBA代码写入。(把ThisDrawing设置为当前活动文档。和VBA中经常使用的ThisDrawing保持统一,VBA代码移到DLL中不需要修改什么代码。)
这样,一个基本的DLL就做好了。那做好了,怎么调用呢?
1.先生成刚才的DLL,如生成为 工程1.dll。注册下,比较简单的方法就是在工程1.dll同一目录下新建一个1.bat文件,在里面写上 Regsvr32 工程1.dll,然后双击1.bat就注册了。
2.接下来就是在CAD中调用啦。CAD的工具-宏-打开VB编辑器,新建个模块在里面写上:
Option Explicit
Dim AppDll As Object
Sub Start_CrYm()
Set AppDll = CreateObject("工程1.Class1")
AppDll.Start_CrYm
Set AppDll = Nothing
End Sub
解释下:创建AppDll为DLL对象,注意的是:这个工程1是你VB中编写DLL的名称,不是生成后的dll文件的名称。Class1就是上面那个。如果你编写DLL的时候你修改这个类模块的名字的话这里(Set AppDll = CreateObject("工程1.Class1"))也要修改。总之,这个CreateObject中使用到的名称和你编写DLL的VB IDE中的名称对应。
然后运行Start_CrYm这个宏看看,哈哈,是不是form1出来啦。

本人按照上面的步骤试过了 但是在cad vba中出现ActiveX不能创建对象,如下图,请问高手怎么解决,本人都已注册工程1.dcll文件了。
展开
 我来答
zl998100
2014-05-27 · TA获得超过730个赞
知道小有建树答主
回答量:1067
采纳率:50%
帮助的人:1053万
展开全部
经过我的测试, 你应该是没有注册好DLL, 你看看 引用里面有 工程1 这个选项吗
更多追问追答
追问

你测试成功了吗 我用vb精简版的 已经注册过dll了 已经引用工程1了 如下图

追答
我用EXCEL 测试的, 方法应该差不多的, 在没注册的时候是有这种提示的, 注册以后 创建对象就可以正常调用接口程序了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式