mikewolf2k 发表于 2003-12-15 21:05:00

自编的dll文件怎样调用?

1. 启动Visual Basic 5 or 6;
2. 在New Project Wizard中选择ActiveX DLL;
3. 把工程名改为"MyProject";
4. 在工程中有一个缺省的类模块,把它的名称改为"MyClass";
5. 添加一个函数或者子例程到类模块中。例如:

' This function takes two arguments, and will return a list of data to the calling function
Public Function MyFn(ByRef arg1 as Integer, ByRef arg2 as Double) As Variant
myForm.Show vbModal
' Create a list of items to return to the caller (the items are in this case purely arbitrary)
MyFn = Array(1.0,"Arbitrary string",2)
End Function

(这里,myForm是一个你必须添加到工程中的表格。同时切记MyFn是一个函数,它将返回一个值或者一组值给调用例程。)

6. 点取File -

Make MyProject.dll。这就会生成一个DLL并且把它注册为COM。(如果你想在其他机器上运行此DLL,你需要首先确认在所有的机器上安装并注册了这个DLL。这通常需要你用Visual Basic生成一个安装包。)
7. 如果你想从Visual LISP中使用此DLL,你需要定义一个简单的函数,并且把他加载到AutoCAD中:

(defun showDialog (/ acadApp vbApp retVal retList)
;; required in AutoCAD 2000, not R14
(if (car (atoms-family 1 '("vl-load-com"))) (vl-load-com))
;; get the main AutoCAD application object
(setq acadApp (vlax-get-acad-object))
;; load VB ActiveX DLL into AutoCAD's address space (either line will work)
;;(setq vbApp (vlax-invoke acadApp "GetInterfaceObject" "MyProject.MyClass")
(setq vbApp (vla-GetInterfaceObject acadApp "MyProject.MyClass"))
(if (not vbApp)
   (princ "\nError loading ActiveX DLL.")
   (vlax-invoke vbApp "MyFn"
                     7      ; arg1, an integer
                     1.5      ; arg2, a 'double'
   )
)
)


以上是用vb5编的dll文件,其中有些部分看不懂,请赐教:
1 "如果你想在其他机器上运行此DLL,你需要首先确认在所有的机器上安装并注册了这个DLL。这通常需要你用Visual Basic生成一个安装包。"是什么意思,具体怎样做?
2 这个dll怎样用visual lisp调用,命令是什么?我照上面所说的编了一个lisp文件,在cad2000中也加载了,但是不知怎样激活它.请哪位高手根据dll源文件告知如何用lisp文件调用,最好是源程序(我对lisp一窍不通).

efan2000 发表于 2003-12-16 11:57:00

第1个问题是关于组件的注册,组件必须注册之后才能使用,所以直接拷贝的就不能使用。有两种方式,1、做成安装包,安装程序会自动注册它。手工注册使用Regsvr32。
第2个问题是VL调用DLL的问题,应该使用vlax-create-object创建组件的实例,才能使用它的功能。

mikewolf2k 发表于 2003-12-16 18:00:00

能不能在详细点,第一步,第二步.....
页: [1]
查看完整版本: 自编的dll文件怎样调用?