程序我写出来了,VB的DLL代码如下
- '该DLL虽然简单,但是其功能却是一般的VLisp所不容易实现的
- '主要是VLisp不容易实现对话框功能(现在好像有一些第三方的软件,比如ObjectDCL可以实现一些),
- '所以有时候我认为,学习DCL没有什么必要,好处就是使得你的Lisp程序更加一体化,但是我想DCL实现
- '对话框功能也是几乎不可能的把 Designed by Taoyimaier
- Function dia_show_test() As String
- Dim return_str As String
- dia_frm.dia1.ShowOpen
- On Error GoTo errhand
- return_str = dia_frm.dia1.FileName
- dia_show_test = return_str
- Exit Function
- '下面的语句是使得选择了取消按钮后,不出现错误提示
- errhand:
- If Err.Number = 32755 Then
- Err.Clear
- End If
- Exit Function
- End Function
- Function get_average(ByVal one As Single, ByVal two As Single, ByVal three As Single) As Single
- get_average = (one + two + three) / 3
- End Function
- '然后将编译后的DLL用命令"regsvr32 dia_pro.dll"注册
- '以便于在VLisp里用(vlax-create-object "dia_pro.dia_test")语句调用
VLisp内容如下
- (vl-load-com)
- (defun C:test(/ vla_obj_test file_obj) ;vla_obj_test是一个VLA对象,不同于Lisp里一些变量.
- (setq vla_obj_test (vlax-create-object "dia_pro.dia_test"))
- (setq file_obj (open (vlax-invoke-method vla_obj_test 'dia_show_test) "r"))
- (setq aa (read-line file_obj))
- (setq bb (read-line file_obj))
- (setq cc (read-line file_obj))
- (close file_obj)
- (princ (strcat "\n选取文件的前三行平均数为"
- (rtos (vlax-invoke-method
- vla_obj_test
- 'get_average
- (atof aa)
- (atof bb)
- (atof cc)
- )
- )
- )
- )
- (princ)
- )
- ;在看该程序时,可以使用VLisp的监视器观看一些ActiveX变量相关信息,便于理解.
- ;程序功能,读取一个文本文件的前三行,将其求平均数,并将结果打印出来.
- ;注意选取文件的类型及格式要正确,该程序对这部分的处理没有花功夫.
差不多了吧,其实efan版主的代码也是一样的,它写得更有代表性,调用API也是vlisp
做不到的(只是我不会API),差不多了吧,以后有时间看看lisp的书,不难的,可能
关于ActiveX这部分开始有些不适应,等你懂了后,你会。。。。 程序附上 |