【小工具】VB6.0制作“标准DLL”----彻底摆脱ActiveX DLL的影子
关于用VB6.0制作“标准DLL”这件事,网上早已出现过不少的争论了。我在这儿也不想对以前的事发表过多的评论。
只是说一下最关键的区别:以前的各种制作方法,归根结底做出来的还是ActiveX DLL,只是比VB6直接编译出来的多了导
出函数罢了;而使用我的这个小程序弄出来的DLL,就不再是 ActiveX DLL !
废话不多说,上图为证。
先上张用以前流传的方法做出的DLL的“效果图”。这是我用http://bbs.csdn.net/topics/390589259所提到的方法做
了个简单的示例。老马他们那儿曾经发布了个“函数添加大师”,我以前下载来看了下他的说明,但没安装使用,从他所
说的来看,也是“带导出函数的ActiveX DLL”,只是使用比较方便罢了。
下面就上张用我的这个工具做出的DLL的“效果图”了。是把我上次发布的MD5模块稍作修改做了个DLL样例。这是实
在的效果图,并不是把那几个函数 PS掉了的!
软件界面样图:
别的我不想再写了,下面把我写的软件“说明”文件的内容贴出来。
欢迎大家发表见解。
一会儿我把这些相关东西打包上传到资源,如果有兴趣的就下载来看看。
⒈ 概述
VB6.0本身只支持制作ActiveX DLL文件。对于用VB6.0制作“标准DLL”(当然这
是“狭义”的标准DLL:指带导出函数、直接调用的DLL,不用通过对象来调用),网
上早已出现过不少的争论,但争来争去,似乎都是谁也没说服谁。网上也流传过不少
的“用VB6.0制作标准DLL的方法”,虽然或繁或简,还有的做成了VB6.0的插件,但
是这些方法的实质如出一辙,做出来的DLL文件,也仅仅是“带导出函数的ActiveX
DLL”而已。虽然带有导出函数,可以直接通过"Declare"来使用了,其实它们并没有
彻底摆脱ActiveX DLL的影子。
不过,用我这个制作工具链接的DLL,就不再是ActiveX DLL了。可以用M$出品的
Dependency Walker工具对制作出来的DLL文件查看对比,就明显看出区别:以前网流
传的方法做出的DLL,如图片“DllTest”中所示,都会有四个如影随形的函数:
DllRegisterServer、DllUnregisterServer、DllGetClassObject、DllCanUnloadNow
而用我的这个工具做出来的DLL文件,这几个函数就彻底消失了!因为根本不需要任
何Class模块来做承载体。效果如图片“MD5Fun”中所示。
当然,由于开发平台的关系,做出来的DLL代码要能执行,当然也基本是离不开
MSVBVM60.DLL的支持。用VB6做出的东西要摆脱它,可不是一般的功力可及的!!!
⒉ 软件安装
最初是打算做个安装程序的,不过后来觉得没什么意思。毕竟这也基本上是个没
太大应用价值东西,可能大家也只是“试一下”而已,并且这个“安装”并不复杂,
不想再折腾那么多了。
“手工安装”过程如下:
①在VB6安装目录中,把原来的“Link.exe”名字改成Link2。注意:不要用其它
名字,更不能把它删除了!因为最终的链接操作,仍然是调用这个程序来完成的,我
的程序只是做了一些“前期工作”。
②把我的“Link.exe”复制到VB6安装目录中。至此,最关键的操作就完成了。
③安装“Standard DLL”模板。把 StdDLL.vbp和Dll_Main.bas 这两个文件,复
制到“VB6安装目录\Template\PROJECTS”中就行。如果Template或PROJECTS目录不
存在,可以自选创建(注意路径的层次关系)。
安装模板后,在新建工程中,就能使用这个模板来创建标准DLL框架了,如图片
“新建工程”中所示。如果你安装的是企业版,它带的模板可能比较多,这个模板可
能排在最后面去了,你需要拖动右边的滚动条,让它显示出来。
“标准DLL模板”也可以不用安装。如果要用这个工具做“标准DLL”,只要新建
一个“标准EXE工程”,然后:移除窗体模块Form1、新建一个“模块”Module1,再
在Module1中写个Sub Main()过程,最基础的框架就完成了!
比如这样写:
Private Sub Main(): End Sub
甚至,你可以 Private/Public 都不写,就写“Sub Main(): End Sub”就行了!
剩下的,就是你自己的DLL所用的Function、Sub等要做的事了。
⒊ 软件界面
你所能看到的,就是一个窗口,如图片“窗口界面”中所示。左边树形列表,是
各个可用的模块,以及其所包含的可用导出函数。右边是列表框,列出你已经选定添
加的导出函数。青色背景的标签,显示内容是:你在树形列表中选定的函数或模块所
在的“源文件”路径。“基址地址”含义没什么可解释的,一般还是不要改它为好。
另外,输入的数值直接按16进制解释,并且 &H或0x 字头不要输入。添加好需要的导
出函数后,点“确定”就可链接好DLL文件。
如何“添加导出函数”,请继续往下看……
⒋ 软件操作
在你的源代码编写好后,请先保存一次你的工程源码(各模块都必须保存,代码
作了修改再次编译时,可以不用保存),然后在VB6.0的IDE中,菜单操作:
“文件”-→“生成xxxxx.xxx(K)...”[注:这儿显示的是.exe还是.dll,不用管]
然后在弹出的窗口中,选择好输出的磁盘路径及文件名。这步有个非常重要的地方:
在第一次编译时,一定要在输出文件的后面加上“.dll”(大小写都可以)。一定要
注意,如果你不指定.dll后缀,它就是链接成.exe文件了!但你再次对本工程编译链
接时,直接确定就行。
选择好输出路径、输出文件名,如果指定了.dll,点“确定”后,就会出现本软
件的窗口。要添加导出函数,可以在左边树形列表的节点中,点“模块名”,再点右
边的按钮“添加该模块”,把选定模块中的所有函数添加到导出函数列表;或者以稍
慢的速度“双击”函数节点,把选定的一个函数添加到导出函数列表(点太快不行,
它没响应的。它没有双击事件,并且太快了鼠标消息还会被吃掉)。如果要删除已经
添加的函数,则在右边列表框中,双击相应项目移除一个,或点按钮“清空列表”全
部删除。5个按钮都设有访问键,大家一看界面就知道了,我不必多说。
如果某函数已经在导出列表中,则左边树形列表的函数节点上,函数名左边的图
标会显示一个绿色的“钩”号,而没有添加的函数,它的图标只是一个白框。当你在
左边树形列表的函数节点上,点中已经添加的函数,则右边列表框中对应项目也会自
动被选定;如果在树形列表中选定的函数未添加,或者选中的是模块节点,则右边列
表框就没有项目被选定。同样,当你在选定右边列表框中的任意一个项目时,左边树
形列表对应的函数节点也自动选定。任何时候,青色标签中都显示着树形列表函数节
点或模块节点对应的源文件路径。
点“取消”可以放弃链接操作(会询问)。
点“复位”可以恢复前一次选定的导出函数列表(本工程如果是第一次编译,则
跟“清空列表”的效果一样)。
如果关闭窗口,则直接放弃链接操作(不询问)。
当选择后导出函数列表后,点“确定”,随后就进行DLL文件的链接操作。这个
时候,你当前的工程模块信息、导出函数列表信息等,会在临时文件夹中,保存到
"CompInfo.db"文件中(这个文件内容你别改,否则可能失效了),这样,当你对源
码进行了修正,再次编译链接时,可以不用再次进行导出函数的添加操作。
“提醒选择导出函数列表”选项默认选定,这样每次编译链接,窗口都会弹出。
你也可以在“确定”前去掉它的钩选,这样,如果工程中“可用的导出函数列表”没
有变化,比如你只是对各个Sub/Function的代码做了修改,或加了、减了个类模块什
么的(因为类模块、窗体模块都不支持“导出函数”),控制窗口就不再弹出,按已
经选定的导出函数列表进行链接操作。
当你在任意标准模块中增加或删除了Sub/Function时,或者改变输出文件路径、
输出文件名时(这时要再次指定.dll后缀!),控制窗口就会重新出现了。如果你把
临时文件夹中的"CompInfo.db"文件删除后再编译,控制窗口也会出现。
[解决办法]
哈, 这是给我的生日礼物么, 收下了, 顺便接分, 帮顶.
[解决办法]
thanks for share.
[解决办法]
不知道会不会有内存没有释放??
[解决办法]
回复能给积分不?
[解决办法]
保存备查,感谢楼主分享
[解决办法]
感谢分享ssssssss
------解决方案--------------------
感谢楼主的分享
[解决办法]
感谢楼主的分享
[解决办法]
差不多是古董级的工具也能做出好东西呀,支持一下。
[解决办法]
详细的资源描述有机会获得我们的推荐详细的资源描述有机会获得我们的推荐
[解决办法]
没看到这么做的意义是什么,做DLL直接用VC就可以了,干麻这么麻烦?
[解决办法]
很好
[解决办法]
thanks for share.
[解决办法]
不明觉厉:虽然不明白你们在说什么,但是感觉很厉害的样子
[解决办法]
learning
[解决办法]
现在还在用vb的,可以参考下
[解决办法]
还是需要vb运行库支持啊。。。。。。
[解决办法]
多写点实用的东西吧
[解决办法]
[解决办法]
转载文章请注明出自“CSDN(www.csd转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者n.net)”。如是商业用途请联系原作者
[解决办法]
不错。。。。
[解决办法]
不错啊 蛮好的
[解决办法]
好贴一定要顶!
[解决办法]
nande HAI YOu 楼主这么分析的人
[解决办法]
看起来不错,不过我已经离开了VB的队伍了
[解决办法]
看看是什么~
[解决办法]
很久不用vb了...
[解决办法]
很深奥了,,,完全看不懂
[解决办法]
好像很有用的样子,收藏了
[解决办法]
好像很深奥的样子!
[解决办法]
楼主精神值得俺钦佩!!谢谢楼主
[解决办法]
新建一个标准EXE工程,什么代码都不写,总会有3、5个杀软报毒。
我的这个写了一大堆的代码,扫描结果是全部都没发现病毒。
[解决办法]
我过路的,要积分
[解决办法]
学习了~~~~~~~~~~~~~~~
[解决办法]
强烈支持!
[解决办法]
great
[解决办法]
好贴,跟你的API MD5一样让我喜欢。
[解决办法]
VB怎么了?VB在排行榜一直前十,这就是魅力!
[解决办法]
受益良多
[解决办法]
顶一个
[解决办法]
感谢楼主的分享
[解决办法]
[解决办法]
支持楼主。