VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: download

[原创] 全球首创? 再次突破VB极限!VB真正稳定多线程(不用tlb,tls,ax,pcode)

  [复制链接]
 楼主| 发表于 2010-4-30 17:37:51 | 显示全部楼层
79# download  


不知道这种情况叫什么。。bug??貌似也不是。。。
hackerrose 发表于 2010-4-30 17:28


叫做 fun
回复 支持 反对

使用道具 举报

发表于 2010-4-30 23:49:48 | 显示全部楼层
I am using "DllGetClassObject" to initialize vbruntime, but you must use "dummy" external ActiveX dll created in VB. Maybe use of fake vbheader (bytes from an dll) is the way to make multithreading fully working without external dll ... look at VBDllGetClassObject in msvbvm60.dll

One thing ... createobject, msgbox etc is working with DllGetClassObject methot, but I mean that New keyword will not working anytime !! Class from one thread is not registered to other threads and private class in EXE is not IClaaFactory based. You may use TLB to make it classfactory based, but you do not make it registered for another thread.... maybe if you patch msvbvm to call coinitialize with multuthreading support ;) Or you must write an initializer that marshal classes from one thread to another, then register it to thread with generated clsid and then use CreateInstance :))) God luck ;) VBgood is good ;)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-1 08:43:51 | 显示全部楼层
I am using "DllGetClassObject" to initialize vbruntime, but you must use "dummy" external ActiveX dll created in VB. Maybe use of fake vbheader (bytes from an dll) is the way to make multithreading fu ...
izero 发表于 2010-4-30 23:49


Dear,
thanks for your feedback.

1...............
but the way is so complicated.
when you use DllGetClsObj, you can NOT do it with one line code.
so it'll be crash on the next line. setSystemError.
you have to loadlibrary/getmodulehandle and then getprocaddr.
after all of them. and call the ptr of the function you mention.
btw: when you get the obj ptr, where do you put it on? Tls? Global? Mars?
could you show us an example for this?

2................
because of the vb DllCallfunc (internal implement with key word:
Declare sub/function) alway find info it need from the peb.
a fake vbheader(people call it peb hook?) does not working with vb.
excep you did not use winapi from source code. just tlb.

3................
a patch for vbvm dll is good. but The law forbids patching.
so you can not redisk a modified vbvm dll for your sofware. are you?

PS: where are you from? why not speak Chinese?

-----------------------------------------------
根据这位国外友人的反馈,在线程中...
不支持 set obj=new xxx '这样的前期绑定的new关键字
以及 set obj=createobject("xxx") '这样后期绑定也不支持
-_-! 也就是不支持VB内部的创建对象操作咯.
不过己经在主线程创建好的在子线程中应该可以使用.
顶楼的frmOutput就是一个例子.

刚才顺手跟了一下,发现CreateObject是 vbvm.dll->rtcCreateObject2
而new是vbvm.dll->vbaNew 有兴趣的可以追一下看看...
回复 支持 反对

使用道具 举报

发表于 2010-5-1 14:21:29 | 显示全部楼层
专家发的东东 收藏了...............
回复 支持 反对

使用道具 举报

发表于 2010-5-1 14:26:08 | 显示全部楼层
83# download

根据Google搜索,老外早在2004年就知道CreateIExpr***这个隐藏函数了……
回复 支持 反对

使用道具 举报

发表于 2010-5-1 15:15:51 | 显示全部楼层
83# download  

根据Google搜索,老外早在2004年就知道CreateIExpr***这个隐藏函数了……
acme_pjz 发表于 2010-5-1 14:26

这个老汉在发贴之前就发现了。。。所以在全球首创的后面加了个问号。
PS:帮我赚了好多分,发财咯

这个是由于2楼出的1k大洋,而且他需要用TLB重写太多代码,
所以觉得有必要找一个初始化的函数,于是最终发现这个……

当然了,像82楼的说的方法(由于没发出代码,也没法验证稳不稳定)
让MSGBOX正常的方法研究过一会,不过关联的内容太多就没时间去追(如果有谁又出N K大洋的话……,因为自己也不是太需要,所以就没研究深入的必要了,有兴趣的可以自行研究)


PS:帽似老外也没解决MSGBOX的问题 ,我似乎解决了50%(不公开相当于没解决),呵呵。目前暂时没时间玩VB了,今天开始学VC……
BTW:你的MFC水平如何?有没有研究过?
回复 支持 反对

使用道具 举报

发表于 2010-5-1 22:42:26 | 显示全部楼层
本帖最后由 菜鸟学飞 于 2010-5-1 22:47 编辑
83# download  

根据Google搜索,老外早在2004年就知道CreateIExpr***这个隐藏函数了……
acme_pjz 发表于 2010-5-1 14:26

是不是这里 也是说的初始化VB运行库的问题
http://www.vb-decompiler.com/viewtopic.php?f=4&t=1771

似乎在这里面找到了一点线索,不过英语不行 有些看不太明白~~
回复 支持 反对

使用道具 举报

发表于 2010-5-1 23:19:57 | 显示全部楼层
是不是这里 也是说的初始化VB运行库的问题
http://www.vb-decompiler.com/viewtopic.php?f=4&t=1771

似乎在这里面找到了一点线索,不过英语不行 有些看不太明白~~
菜鸟学飞 发表于 2010-5-1 22:42

对,也就是一句,不过就这么一句想得精华估计很难
  1. I patched dll main in my dll to call msvbvm60.CreateIExprSrvObj with args 0,4,0 and it is enuogh to initalize tls and ole pointer table, but I think something else is still off ...a quick test to one of my exported functions with msgbox still did not work.
复制代码

而且我研究了半天才发现这个隐藏函数,虽然以前曾经看过(在合并msvbvm的dll到exe的时候这些VBDLL的函数都看过好几十将近百遍了),不过未曾注意到他的用处……直到2楼出了1k大洋,所以决定帮他找个好用点的函数……最终追踪才发现这个……有点意思的古玩。


PS:他上面的揭密比菜鸟学习的tls揭密好像多一句:ole table这也就难怪你上次再次用tls大法硬编 码仍然出错的原因了……
回复 支持 反对

使用道具 举报

发表于 2010-5-1 23:25:01 | 显示全部楼层
86# msflexgrid

你老老实实用SDK不就行了么,反正MFC的封装也是浅层的……
回复 支持 反对

使用道具 举报

发表于 2010-5-1 23:27:36 | 显示全部楼层
本帖最后由 acme_pjz 于 2010-5-1 23:53 编辑

发一个以前我用VC6 SDK写的东西,MyGVM,文曲星下Lava虚拟机的解释器,因为用VB写的Bug太多,运行得有点慢,而且不支持多线程,所以用VC6写了个……我以前发在文曲星论坛上面的,不知道这个网址还能不能下载:http://www.emsky.net/bbs/viewthread.php?tid=29211 你就自己参观一下吧……

[EDIT] 在VBGood的镜像:http://www.vbgood.com/viewthread.php?tid=69693 12楼……

评分

参与人数 1人气 +1 收起 理由
msflexgrid + 1 大概看了一下,好像是SDK,不是MFC……-_-!

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-8-14 08:53

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表