设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: ganlinlao
打印 上一主题 下一主题

[模块/函数] Access菜鸟七大邪门武器之二——免注册使用ActiveX控件

[复制链接]
跳转到指定楼层
1#
发表于 2013-11-3 09:37:18 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ganlinlao 于 2013-11-3 09:46 编辑

DirectCOM 是个好东西!有了它,你就可以使用VBA直接从ActiveX DLL文件创建对象,这意味着用office的VBA可以
开发后期绑定的插件,而不需通过RegSvr32命令对该DLL文件进行注册,不需直接引用该DLL。


使用方法:

       1、 把DirectCOM.dll 复制到你所写的access程序目录中,或system目录
       2、在你的vba模块中建立一个 DirectCOM.bas的模块。
  3、先使用 DirectCom_Load() 加载DLL,并获取句柄
  4、使用 DirectCom_Create() 创建对象(注意该对象为Object类型)
  5、最后使用 DirectCom_Free() 释放DLL

    就这么简单!

DirectCom.bas的代码如下:

'@说明   加载动态链接库
'@参数     动态链接库文件名
'@返回值    成功返回句柄,失败返回0
Public Declare Function DirectCom_Load Lib "kernel32" Alias "LoadLibraryA" ( _
    ByVal lpLibFileName As String _
) As Long


'@说明   释放动态链接库
'@参数     动态链接库句柄
'@返回值    非0表示成功,0表示失败
Public Declare Function DirectCom_Free Lib "kernel32" Alias "FreeLibrary" ( _
    ByVal hLibModule As Long _
) As Long


'@说明   直接从ActiveX DLL文件创建COM对象
'@参数     ActiveX DLL 文件名
'@参数     类名
'@返回值    成功返回类的实例,失败返回Nothing
Public Declare Function DirectCom_Create Lib "DirectCOM" Alias "GETINSTANCE" ( _
    FName As String, _
    className As String _
) As Object


'@说明   获取DirectCOM最近的错误信息
'@返回值    错误信息文本
Public Declare Function DirectCom_GetError Lib "DirectCOM" Alias "GETINSTANCELASTERROR" ( _
) As String

例如:

    1、如你有一个ActiveX的TestDLL,里面有一个类,名为 TestClass,有一方法名为 ShowAbout
    2、在access中,将DirectCOM.bas复制到你的模块中
    3、输入以下代码到某按钮事件

       Dim hTestDll as Long
       Dim MyObject as Object
       hTestDll = DirectCom_Load("TestDLL.dll") '加载DLL
       if hTestDll then            '如果加载成功
           set MyObject = DirectCom_Create("TestDLL.dll", "TestClass") '直接创建对象,注意该地方只需指明类名即可
           if not Myobject is nothing then '如果创建成功
               MyObject.ShowAbout         '执行类的方法
           end if
           set Myobject = nothing         '释放对象
           DirectCom_Free hTestDll '释放DLL
       end if

备注:
     惊闻access窗体无法在运行中动态创建控件,不禁嘘嘘感叹。
     出手未捷鸟先死,Access频寒冬瓜心

附上DirectCom.dll
http://pan.baidu.com/s/1xLA3T

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享分享 分享淘帖1 订阅订阅
2#
 楼主| 发表于 2015-12-24 21:13:35 | 显示全部楼层
DirectCom并不支持ocx控件。
如果要使用免注册的ocx控件,有三种途径:
(1)、driectOcx
(2)、vb6的SideByside方式
(3)、用Atl7.1.dll直接使用事件连接点  (在freebasic中就是使用这种方式)
vb6已死,有事烧纸,在这里我不想再多说什么。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-14 22:38 , Processed in 0.096945 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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