突然想到的:VB6 CreateObject间接激发事件
VB中CreateObject的对象无法激发事件,相信很多人都为此头疼过.查过很多资料,都没想到好的办法.
今天想到一个好办法可以间接激发CreateObject对象的事件.
一般情况是这样的:
一个进程 prjA.exe,用CreateObject方式调用 DllB.dll,但是无法激发DLLb.dll中的事件(至少我还没找到直接的方法),我的办法是,再增加一个DLLC,类型为DLL或ActiveX EXE,用它来转发DLLb.dll中的事件.
前提条件是 PrjA.exe,DLLb.dll和DllC都是自己编写的.只需PrjA.exe和DllB.dll都引用DLLC,在DLLB中调用DLLC中相对应的事件激发函数,并将参数传递给DLLC,在DLLC中进行一些处理,接着由DLLC激发事件,转发给PrjA.exe.
适用情况:尤其适用于插件式系统.比如说DLLb.dll是自己程序的扩展插件模块,即DLLb.dll是实现程序中IA接口的一个插件,在这样的插件式的系统中,只能用CreateObject来调用插件,若要激发DLLB.DLL中的事件此时只需加入DLLC来转发给主程序即可.
优点:不用说,DLLB.DLL中的事件终于可以发出来了.其次,把DLLC作为一个ActiveX EXE,即相当于一个进程之外的事件发动机,这样的系统工作更有层次,而且在主进程外,效率会更高.
缺点:多了一个用于转发的DLLC.
就说这么多,我表达能力不行,看懂的来拍砖吧,希望能讨论出一个更好的模型.
[解决办法]
不怕有错误,有思路就好
[解决办法]
纯 CreateObject 创建的对象想实现非 vtable 绑定的事件方式,简直不可能,
这就是为什么createobject无法实现事件的原因.
关于事件的实现方法,vb是以自己构造调用点实现的,总的来说,就象一个事件表,而这个事件表是vb自动编译进去的... 而且是非公共方法..................不过貌似这个东西好像和MFC的事件发生器类是一样的
[解决办法]