VB是否有可能摆脱MSVBVM60.DLL

Sandrer 2008-01-24 10:12:46
之前做了个程序,在子类化的时候程序发生错误自动退出,但是没有提示哪里出错,所以怀疑是API导致的。
于是用OD分析调试程序。

不看还好,一看才发现,原来VB编译出来的程序,无论你调用多少API,程序都不是直接调用API的,而是使用MSVBVM60.DLL中的叫“DllFunctionCall”、“MethCallEngine”、的函数
而且还有很多其他字符处理的函数。

所以我才想到这个问题,大家给点意见。


...全文
1339 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
szysslszy 2011-02-16
  • 打赏
  • 举报
回复
那是VB的“虚拟机”,必须要用。
「已注销」 2009-06-20
  • 打赏
  • 举报
回复
相信大家都想让自己的VB程序能够脱离那个累赘的DLL---msvbvm60.dll。可是使用各种方法都不行。网上的方法有:
VC打包法:这个问题可笑之极,如果VB都用vc打包,干嘛还用VB,直接学VC的啦,况且VC程序也比VB+msvbvm60.dll小。
更改DLL法:实在是找事!!把APP里的msvbvm60.dll改成什么DLL?那么VB初始化需用的VBRUN函数去哪找?
解压法:用winrar压缩。无言以对。。。。

以上的方法都不可行,是因为vb的初始化是要用到VBRUN函数的。所以要想彻底摆脱DLL,应认识到VB的初始化。为什么vb会有初始化呢?因为VB的C2.EXE。C2是vb专有编译文件,C2根据VBP、FRM、BAS、CTL等选择初始化函数,但是,无论你的窗体多么简单,他都要做这么几件事:初始化内存、窗体颜色等、申请DLL使用权等等。
重要的是vbrun。他包含许多执行以VB6设计的软件所必要的执行文件以及动态连结文件。总共有以下这些最新版的动态连结文件(DLLS):Advpack.dll、 Asycfilt.dll、Comcat.dll、msvbvm60.dll、Oleaut32.dll、Olepro32.dll、 Stdole2.tlb、W95inf16.dll、W95inf32.dll。根据使用的额外函数,dll数量会有变化。
可能有朋友要问:怎么取消vb初始化呢?这个问题还是留给microsoft好了。要想解决这个问题,就得重新写C2.exe。那时,全世界都将掀起一阵vb风,所有的简单,中等的程序都用vb写。制作程序更简单。不过,microsoft声明他们不用VB写windows,但是我有疑问:为什么microsoft连二三百MB的.net都敢集成,却不敢放进一个小小、1.20MB的msvbvm**.dll?
「已注销」 2009-06-20
  • 打赏
  • 举报
回复
补充一下,kernel32.dll,user32.dll功能你也可以自己写
「已注销」 2009-06-20
  • 打赏
  • 举报
回复
你学win32汇编算了,不过还是要kernel32.dll,user32.dll...
程序员老干部 2008-01-28
  • 打赏
  • 举报
回复
摆脱它有意义吗?
dunzimu 2008-01-28
  • 打赏
  • 举报
回复
VB很牛,很暴力。
麦壳饼 2008-01-28
  • 打赏
  • 举报
回复
.net 很牛。但是也离不开框架。
java很牛业离不开虚拟机。
当然, c++要写出来好程序, 还是离不开mfc
ncca 2008-01-27
  • 打赏
  • 举报
回复
关注,可以把dll压缩,用其他语言加壳到自身,运行的时候释放,然后。。
m60a1 2008-01-26
  • 打赏
  • 举报
回复
LZ可以告诉你,肯定不行,VB在运行自己的时候,自己会加载数十个API
来支持自己,如果把那个库去了,VB将不能正常运行!
重新安装系统后,查看注册表你会发现微软的系统,自带了一些VB的内容
就算你不安装VB这些东西还是会有!
Sandrer 2008-01-26
  • 打赏
  • 举报
回复
看来是不可能的了,结帖。。。。。。。。。。。。
IamDeane 2008-01-26
  • 打赏
  • 举报
回复
没有可能里看那个DLL,它的根本就是那个DLL,没有那个DLL,就不是VB了
ly_liuyang 2008-01-26
  • 打赏
  • 举报
回复
用Delphi就没这个问题啦,呵呵
早起旺财 2008-01-26
  • 打赏
  • 举报
回复
VB是不能摆脱MSVBVM60.DLL
开发速度快,程序执行速度慢也就是这个原因
eslbs 2008-01-25
  • 打赏
  • 举报
回复
程序运行的时候



程序exe段
(静态变量、全局变量)
(代码段)



加载DLL段
(静态变量、全局变量)
(代码段)


程序的exe段可能直接或者间接调用dll里的东西,其实就是直接 call或者 jmp过去

所以如果你能力强
完全可以把 exe的代码和dll里你需要调用的代码段合在一个文件里面
把原来exe调用dll 的代码的跳转 全部指向你合成一个exe的对应地址


这样生成的exe 比原来的exe体积要大 但是比exe+dll的体积要小
因为dll里面没有用的代码并没有生成在你的新exe里面


理论上这些是可以实现的
只是理论……
Tiger_Zhao 2008-01-25
  • 打赏
  • 举报
回复
首选:程序没写好不要怪编程工具;
其次:错误提示只能在VB监控的代码内,用API离开VB监控就需要自己进行错误判断了。
还有:世上没有完美的编程工具,享受便捷的同时必定需要受到一些限制。
最后:如果脱离MSVBVM60.DLL,那么IDE也需要重做,那就不是VB6了。
warlord 2008-01-25
  • 打赏
  • 举报
回复
VB如果摆脱了MSVBVM60.DLL,那就是另外一种语言了.
嗷嗷叫的老马 2008-01-25
  • 打赏
  • 举报
回复
....飘过~~~~
东方之珠 2008-01-25
  • 打赏
  • 举报
回复
VB中关于API的Declare声明是不能直接调用API的,而是通过MSVBVM60.DLL进行虚拟调用。但,有时候会出现下面的错误:


Microsoft Visual C++ Runtime Library

Runtime Error!

Program:E:\MyAlbum\photo.exe

R6025

-pure virtual function call!

但,后来我解决了这个问题:增加一倍内存,重装系统。
Sandrer 2008-01-25
  • 打赏
  • 举报
回复
哎~~~
dk_fangkai 2008-01-25
  • 打赏
  • 举报
回复
从 Win Me 开始所有 Window 均自带此库,打包时无需包含。
调用C/C++等所写外部Dll时需仔细控制资源引用,如考虑稳定需在外部bin上仔细检查或二次封装。
加载更多回复(14)

7,789

社区成员

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

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