明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: myfreemind

DLL引用是不是只能用绝对路径??

  [复制链接]
发表于 2003-12-24 22:25:00 | 显示全部楼层
设计VB程序时用引用,但程序运行时能否用代码引用呢?
怎样用代码引用?
发表于 2003-12-24 22:43:00 | 显示全部楼层
莫名这位,应该是GG吧,你说得太不清楚了,结果是别人听不太懂你的意思,可能是自己水平有限吧,http://www.mjtd.com/a2/list.asp?id=488这个是以前我在明经看到的相关的文章,用VLisp调用VB写得DLL,大家可以看看先,让后也许就会懂一些不好怎么用文字表达的东西了,
发表于 2003-12-24 22:48:00 | 显示全部楼层
使用VL调用VB编写的AcitveX DLL。
首先在VB中新建一个ActiveX DLL工程,工程名称为VBTest,新建一个类模块,名称为Test。
在类模块中加下下面的代码,其中GetComputerName的API函数是用于获取本地的计算机名称。具体说明参考API资料。

  1. Private Declare Function APIGetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

  2. Public Property Get GetComputerName() As String
  3.     Dim strString As String
  4.     strString = String(255, Chr$(0))
  5.     APIGetComputerName strString, 255
  6.     strString = Left$(strString, InStr(1, strString, Chr$(0)))
  7.     GetComputerName = strString
  8. End Property

完成后,编译成VBTest.DLL文件。
接下来,在VL中,首先获取该对象的引用。
(setq vltest (vlax-create-object "VBTest.test"))
接着,获取它的GetComputerName属性。
(setq name (vlax-get-property vltest 'getcomputername))
这时就会在IDE窗口中出现自己的计算机名称了。其它的使用类似,有兴趣的朋友可以自己去研究。
以下附上所有的代码。



这是以前在晓东CAD空间应一个朋友的要求而做的,感兴趣的可以参考。
http://www.xdcad.net/forum/showthread.php?s=&postid=231959#post231959

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2003-12-25 18:49:00 | 显示全部楼层
Taoyimaier老弟,那我就不客气了.
明经通道上那篇关于dll的文件早就看过了,我的dll就是参考它做的,在vba中调用成功.在lisp中调用就看不懂了,没有成功.因此求详细的lisp源程序.
什么时候能搞出来都行,反正我现在还在编程过程中,短时间内还用不上.
发表于 2003-12-26 00:35:00 | 显示全部楼层
那天有时间帮你作一个简单的吧,可能你得VLisp用的还不太熟练,呵呵
发表于 2003-12-26 19:05:00 | 显示全部楼层
不瞒您说,lisp我一窍不通.
发表于 2003-12-27 09:02:00 | 显示全部楼层
程序我写出来了,VB的DLL代码如下
  1. '该DLL虽然简单,但是其功能却是一般的VLisp所不容易实现的
  2. '主要是VLisp不容易实现对话框功能(现在好像有一些第三方的软件,比如ObjectDCL可以实现一些),
  3. '所以有时候我认为,学习DCL没有什么必要,好处就是使得你的Lisp程序更加一体化,但是我想DCL实现
  4. '对话框功能也是几乎不可能的把                   Designed by Taoyimaier

  5. Function dia_show_test() As String
  6. Dim return_str As String
  7. dia_frm.dia1.ShowOpen
  8. On Error GoTo errhand
  9. return_str = dia_frm.dia1.FileName
  10. dia_show_test = return_str
  11. Exit Function
  12. '下面的语句是使得选择了取消按钮后,不出现错误提示
  13. errhand:
  14. If Err.Number = 32755 Then
  15.     Err.Clear
  16.     End If
  17.     Exit Function
  18. End Function

  19. Function get_average(ByVal one As Single, ByVal two As Single, ByVal three As Single) As Single
  20. get_average = (one + two + three) / 3
  21. End Function

  22. '然后将编译后的DLL用命令"regsvr32 dia_pro.dll"注册
  23. '以便于在VLisp里用(vlax-create-object "dia_pro.dia_test")语句调用


VLisp内容如下
  1. (vl-load-com)
  2. (defun C:test(/ vla_obj_test file_obj) ;vla_obj_test是一个VLA对象,不同于Lisp里一些变量.
  3.   (setq vla_obj_test (vlax-create-object "dia_pro.dia_test"))  
  4.   (setq file_obj (open (vlax-invoke-method  vla_obj_test 'dia_show_test) "r"))
  5.   (setq aa (read-line file_obj))
  6.   (setq bb (read-line file_obj))
  7.   (setq cc (read-line file_obj))
  8.   (close file_obj)
  9.   (princ (strcat "\n选取文件的前三行平均数为"
  10.                  (rtos (vlax-invoke-method
  11.                          vla_obj_test
  12.                          'get_average
  13.                          (atof aa)
  14.                          (atof bb)
  15.                          (atof cc)
  16.                        )
  17.                  )
  18.          )
  19.   )
  20.   (princ)
  21.   )
  22. ;在看该程序时,可以使用VLisp的监视器观看一些ActiveX变量相关信息,便于理解.
  23. ;程序功能,读取一个文本文件的前三行,将其求平均数,并将结果打印出来.
  24. ;注意选取文件的类型及格式要正确,该程序对这部分的处理没有花功夫.


差不多了吧,其实efan版主的代码也是一样的,它写得更有代表性,调用API也是vlisp
做不到的(只是我不会API),差不多了吧,以后有时间看看lisp的书,不难的,可能
关于ActiveX这部分开始有些不适应,等你懂了后,你会。。。。 程序附上

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2003-12-27 13:16:00 | 显示全部楼层
谢谢.等我的dll完全编完后再照样编一个lisp.到时候还不懂的话,再....不耻下问.....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-28 10:49 , Processed in 0.177500 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表