按:这个技巧对于工程的强壮性有帮助,而且也比较方便.可能很多朋友都会了,不过应该还不是所有人都玩过/有时间玩,所以就发发了.有些对象有事件,如果使用声明为Object的方式,是无法得到事件的.想使用其事件就得引用此DLL.如果既想动态调用DLL中的对象,又想使用对象的事件,可以试一下本文的方法(完整代码见后).总体思路比较简单,如下:一,利用EditTlb工具(Matthew Curland大师作品,后面有下载)打开目标DLL,直接另存为TLB.
然后再用EditTlb打开这个TLB,改一下GUID,类接口的名称,保存备用.二,EXE工程里引用这个TLB,利用其中与DLL中对象一模一样的接口,写好事件相
关代码.三,使用CreateObject创建对象.
如果DLL正确地注册了,那么就会成功,否则会失败.其中EditTlb工具是重点,让本来需要用ODL语言生成TLB的过程成为过去....在这种应用中,完全没必要折腾ODL语言,所以有工具还是用工具吧....关于PowerVB的工具,我打了个包,包括EditTlb在内.还有本文的示例代码: 点击下载此文件PS:之前在原BLOG里也写了一篇,地址:http://www.m5home.com/blog2/blogview.asp?logID=329&cateID=2现在这篇写得详细一些,感觉应该比原来那篇好懂点吧~~
然后再用EditTlb打开这个TLB,改一下GUID,类接口的名称,保存备用.二,EXE工程里引用这个TLB,利用其中与DLL中对象一模一样的接口,写好事件相
关代码.三,使用CreateObject创建对象.
如果DLL正确地注册了,那么就会成功,否则会失败.其中EditTlb工具是重点,让本来需要用ODL语言生成TLB的过程成为过去....在这种应用中,完全没必要折腾ODL语言,所以有工具还是用工具吧....关于PowerVB的工具,我打了个包,包括EditTlb在内.还有本文的示例代码: 点击下载此文件PS:之前在原BLOG里也写了一篇,地址:http://www.m5home.com/blog2/blogview.asp?logID=329&cateID=2现在这篇写得详细一些,感觉应该比原来那篇好懂点吧~~
2、引用TLB,动态创建对象并接受事件。private withevents mobj as YourTlb.interface动态创建对象并用TLB中的接口来访问:
set mobj = CreateObject("YourDll.ClassName")可以接受事件
private sub mobj_test()
msgbox "Test"
end sub纯VB的方法:1、引用目标DLL。
2、动态创建对象并处理事件。private withevents mobj as YourDll.ClassName动态创建对象
set mobj = CreateObject("YourDll.ClassName")处理事件
private sub mobj_test()
msgbox "Test"
end sub你觉得这两种方式从根本上有区别吗?
单纯从VB这个层面来处理,最好是有类似于VBControlExtender的东西,遗憾的是VBControlExtender只支持控件。妥协的办法就是用接口。即事件接受者跟事件源通过一自定义接口来实现。