【技巧】如何在VB6.0里动态使用具有事件的对象(新手很有用)

嗷嗷叫的老马 2008-12-17 12:36:13
按:这个技巧对于工程的强壮性有帮助,而且也比较方便.可能很多朋友都会了,不过应该还不是所有人都玩过/有时间玩,所以就发发了.

有些对象有事件,如果使用声明为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

现在这篇写得详细一些,感觉应该比原来那篇好懂点吧~~
...全文
443 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗷嗷叫的老马 2008-12-20
  • 打赏
  • 举报
回复
哈哈,汗,是我的问题......

其实不止这一个,最近我犯了好几个低级错误.......

谢谢指出......
intel100 2008-12-20
  • 打赏
  • 举报
回复
谢谢分享
LUOLZD001 2008-12-20
  • 打赏
  • 举报
回复
jf
mokton 2008-12-20
  • 打赏
  • 举报
回复
学习无止境
fj182 2008-12-18
  • 打赏
  • 举报
回复
我没别的意思,不要多心哈.
csgdseed 2008-12-18
  • 打赏
  • 举报
回复
学习
vbman2003 2008-12-18
  • 打赏
  • 举报
回复
顶...
jhone99 2008-12-18
  • 打赏
  • 举报
回复
jf
嗷嗷叫的老马 2008-12-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fj182 的回复:]
老马,我不是钻牛角尖,你没明白我的意思。

用你的方法:

1、创建TLB,在TLB中声明一个跟目标对象接口相同的接口。(注意这里必须用ClsID,而非ProgID)
2、引用TLB,动态创建对象并接受事件。

private withevents mobj as YourTlb.interface

动态创建对象并用TLB中的接口来访问:
set mobj = CreateObject("YourDll.ClassName")

可以接受事件
private sub mobj_test()
msgbox "Test"
end sub …
[/Quote]
也是啊....用起来倒是没什么不同.

不过用TLB声明时可以不需要原组件在机器存在,仅是开发时的这一点不同而已...

但是既然已经能有原组件来生成TLB了,为啥不能引用呢,汗~~记得当初好象有个啥需求需要用到这功能的,记不起来了- -!

不过这次脸丢大了@_@

大家BS我吧.........
是是非非 2008-12-17
  • 打赏
  • 举报
回复
老马~接点分~
xielang127 2008-12-17
  • 打赏
  • 举报
回复
研究中。。。。。。。。。
VBToy 2008-12-17
  • 打赏
  • 举报
回复
留个记号学习。
zdingyun 2008-12-17
  • 打赏
  • 举报
回复
老马抛好货了,支持!
KIMURAHONGBIN 2008-12-17
  • 打赏
  • 举报
回复
谢谢老马大哥,
sailorgg 2008-12-17
  • 打赏
  • 举报
回复
下载,学习
tongnaifu 2008-12-17
  • 打赏
  • 举报
回复
先接分再看
zhou_zion 2008-12-17
  • 打赏
  • 举报
回复
多谢嗷嗷叫的老马了
学习学习……
xrongzhen 2008-12-17
  • 打赏
  • 举报
回复
谢谢老马 学习。。。
  • 打赏
  • 举报
回复
学习啦 ,谢谢啊
fj182 2008-12-17
  • 打赏
  • 举报
回复
我觉得要从根本上解决问题,需要从COM底层入手,自己去处理事件连接点,对COM不够了解,这个可能难度太大。
单纯从VB这个层面来处理,最好是有类似于VBControlExtender的东西,遗憾的是VBControlExtender只支持控件。妥协的办法就是用接口。即事件接受者跟事件源通过一自定义接口来实现。
加载更多回复(3)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧