找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3961|回复: 20

[分享]:使用VL调用VB编写的AcitveX DLL

[复制链接]

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-4-8 23:04:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
首先在VB中新建一个ActiveX DLL工程,工程名称为VBTest,新建一个类模块,名称为Test。
在类模块中加下下面的代码,其中GetComputerName的API函数是用于获取本地的计算机名称。具体说明参考API资料。

  1.   [FONT=courier new]
  2. Private Declare Function APIGetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

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

完成后,编译成VBTest.DLL文件。
接下来,在VL中,首先获取该对象的引用。
(setq vltest (vlax-create-object "VBTest.test"))
接着,获取它的GetComputerName属性。
(setq name (vlax-get-property vltest 'getcomputername))
这时就会在IDE窗口中出现自己的计算机名称了。其它的使用类似,有兴趣的朋友可以自己去研究。
以下附上所有的代码。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 181个

财富等级: 日进斗金

 楼主| 发表于 2003-4-9 20:31:50 | 显示全部楼层
补充,VL提供了对ActiveX对象的操作,对于VB中的函数和过程,使用vlax-invoke-method来操作,而对于VB中的属性过程,则用vlax-get-property获取属性和vlax-put-property设置属性。
最后,提供一个API的ActiveX DLL文件,可以用于获取分区的序列号,网卡的序列号和IP地址,还可以对某一IP地址进行Ping操作。

  1.   [FONT=courier new]
  2. 创建API对象。

  3. 1、GetVolumeSerialNumber RootPathName
  4.    返回某一盘符的序列号。
  5.    如:(setq sn (vlax-invoke-method apiobj 'GetVolumeSerialNumber "C:"))
  6. 2、GetMACAddress
  7.    返回网卡的序列号。
  8.    如:(setq sn (vlax-invoke-method apiobj 'GetMACAddress))
  9. 3、GetIPAddress
  10.    返回某一机器名称的IP地址。
  11.    如:(setq ip (vlax-invoke-method apiobj 'GetIPAddress "www.xdcad.net")),或者(setq ip (vlax-invoke-method apiobj 'GetIPAddress ""))返回本地的IP地址。
  12. 4、Ping HostName
  13.    Ping某一IP地址的机器,成功返回True。
  14.    如:(setq ip (vlax-invoke-method apiobj 'Ping "www.xdcad.net")),返回vlax-true表示IP地址有效,返回vlax-false无效。或者(setq ip (vlax-invoke-method apiobj 'Ping "192.168.0.1"))

  15. 最后,释放对象。
  16. (vlax-release-object apiobj)
  17.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 181个

财富等级: 日进斗金

 楼主| 发表于 2003-4-13 14:55:36 | 显示全部楼层
更新,可返回局域网内的某一IP地址的网卡序列号。

  1.   [FONT=courier new]
  2. 在“开始”——“运行”菜单中,键入regsvr32 apilib.dll的路径+文件名。

  3. (setq apiobj (vlax-create-object "APILib.API"))
  4. 创建API对象。

  5. 1、GetVolumeSerialNumber RootPathName
  6.    返回某一盘符的序列号。
  7.    如:(setq sn (vlax-invoke-method apiobj 'GetVolumeSerialNumber "C:"))。
  8. 2、GetMACAddress HostName
  9.    返回网卡的序列号。
  10.    如:(setq sn (vlax-invoke-method apiobj 'GetMACAddress "192.168.0.1")),或者(setq sn (vlax-invoke-method apiobj 'GetMACAddress ""))返回本地的IP地址。
  11.    注意:仅能返回局域网内的网卡序列号,且仅支持Windows 2000以上的操作系统。
  12. 3、GetIPAddress HostName
  13.    返回某一机器名称的IP地址。
  14.    如:(setq ip (vlax-invoke-method apiobj 'GetIPAddress "www.xdcad.net")),或者(setq ip (vlax-invoke-method apiobj 'GetIPAddress ""))返回本地的IP地址。
  15. 4、Ping HostName
  16.    Ping某一IP地址的机器,成功返回True。
  17.    如:(setq ip (vlax-invoke-method apiobj 'Ping "www.xdcad.net")),返回vlax-true表示IP地址有效,返回vlax-false无效。或者(setq ip (vlax-invoke-method apiobj 'Ping "192.168.0.1"))。
  18. 5、GetComputerName
  19.    返回本地的机器名称。
  20.    如:(setq name (vlax-invoke-method apiobj 'GetComputerName))。
  21. 6、GetUserName
  22.    返回登录系统的用户名称。
  23.    如:(setq name (vlax-invoke-method apiobj 'GetUserName))。
  24. 7、GetSystemDirectory
  25.    返回系统目录的路径。
  26.    如:(setq path (vlax-invoke-method apiobj 'GetSystemDirectory))。
  27. 8、GetWindowsDirectory
  28.    返回Windows操作系统安装目录的路径。
  29.    如:(setq path (vlax-invoke-method apiobj 'GetWindowsDirectory))。
  30. 9、GetTempPath
  31.    返回临时目录的路径。
  32.    如:(setq path (vlax-invoke-method apiobj 'GetTempPath))。

  33. 最后,释放对象。
  34. (vlax-release-object apiobj)
  35.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-27 17:31:58 | 显示全部楼层
谢谢斑竹指点,豁然开朗
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-27 18:12:53 | 显示全部楼层
简直就是茅塞顿开啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2004-4-27 21:50:12 | 显示全部楼层
这么说是可以直接用VLISP调用DLL的函数啦?

(setq apiobj (vlax-create-object "APILib.API"))
这句中的"APILib.API"的点后面为什么为API,可以为其他的名称吗?
要是我只有一个DLL文件,及知道里面的一个函数名及调用方法,我又如何创建对象呢?
如:MYLIB.DLL中有个函数GETID
如何建呢

还有,每台新机子都要进行DLL的注册吗:
在“开始”——“运行”菜单中,键入regsvr32 apilib.dll的路径+文件名。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-4-27 23:18:08 | 显示全部楼层
看efan2000的第一行:
首先在VB中新建一个ActiveX DLL工程,工程名称为VBTest,新建一个类模块,名称为Test
编译成dll后,工程和类的名称不会变.
(vlax-create-object  "VBTest.Test")

在vb中,有了这类后: dim efan2000 as test
              efan2000就成了一个object.就可以用它的方法和属性.
              efan2000.old = 100岁
       efan2000.GetUserName()
          ...
vl方法: (setq efan2000 (vlax-create-object  "VBTest.Test"))
             (vlax-invoke-method efan2000  'GetUserName)           ...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-28 11:38:46 | 显示全部楼层
很深奥不懂
请楼主指点一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2004-4-29 21:55:46 | 显示全部楼层
这里有一个读主板ID的DLL。
其中的函数名
Getmoth()
调用参数两个:Integer, String
其中第一个参数是整数,为0则返回作者信息,为4则返回主板ID,为40则返回经计算的注册码
返回码保存在第二个参数中
其中第二个参数是字符串地址指针
整个函数返回整数值,判断函数执行情况,请问如何进行调用呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1915个

财富等级: 堆金积玉

发表于 2004-5-8 15:11:32 | 显示全部楼层
9楼的请注意:没有active X接口的Dll不能调用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-24 17:22:18 | 显示全部楼层
如果用户没有运行regsvr32 apilib.dll,是否可以让vl调用相关函数运行它呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2005-4-25 14:53:08 | 显示全部楼层
好东西,值得好好研究一下。
谢谢各位提供这么好的东西
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-25 18:53:07 | 显示全部楼层
可惜不能和VLISP编译成一个文件,不然加密还是挺管用的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-2-18 20:02:02 | 显示全部楼层
如何用易语言写能让VL调用的DLL??
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 16个

财富等级: 恭喜发财

发表于 2006-4-16 22:48:41 | 显示全部楼层
能否有读cpu序列号的dll ?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 04:28 , Processed in 0.222337 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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