本资源来自网络,我只不过是稍加整理,谈不上原创,但亦非转贴、翻译,也只能选原创。。。
也曾在别的论坛发布过,仅是收集而已。。。
标准DLL编译工具下载:http://download.csdn.net/source/837118
一、如何使用标准DLL编译工具
使用方法很简单。首先,将C:/Program Files/Microsoft Visual Studio/VB98/link.exe改名为link2.exe
其次,将本文件link.exe复制到C:/Program Files/Microsoft Visual Studio/VB98文件夹中即可。
本工具让你即可使用VB6原默认方式编译,也可编译WINDOWS标准DLL。
二、如何用VB6生成WINDOWS标准DLL
说明:以下内容源自Iczelion的Win32汇编教程中“动态链接库”一节,有改动。
(原文请见罗云彬汇编网站http://211.90.241.130:22366/list.asp?part1=1&part2=4)
对WINDOWS标准DLL而言,每一个DLL必须有一个入口点函数,WINDOWS每一次在做下面的动作时会调用该入口点函数:
当动态链接库被加载时
当动态链接库卸载时
同一进程的线程生成时
同一进程的线程退出时
入口点函数的名称无所谓,在VB6中,我们姑且作如下定义
Const DLL_PROCESS_DETACH=0 '动态链接库从进程的地址空间卸出时
Const DLL_PROCESS_ATTACH=1 '动态链接库第一次插入进程的地址空间时
Const DLL_THREAD_ATTACH=2 '新线程生成
Const DLL_THREAD_DETACH=3 '线程销毁
Function DllEntry(ByVal hInstDLL As Long, ByVal reason As Long, ByVal reserved As Long) As Long
Select Case reason
Case DLL_PROCESS_ATTACH
'MsgBox "动态链接库第一次插入进程的地址空间"
DllEntry = 1
Case DLL_PROCESS_ATTACH
'MsgBox "动态链接库从进程的地址空间卸出"
DllEntry = 0
Case DLL_THREAD_ATTACH
'MsgBox "新线程生成"
DllEntry = 1
Case DLL_THREAD_DETACH
'MsgBox "线程销毁"
DllEntry = 0
End Select
End Function
该入口函数DllEntry共有三个参数:hInstDLL, reason, reserved,只有前面两个是重要的。
hInstDLL:是该动态链接库模块的句柄。它和进程的实例句柄不一样。如果您以后要用,可以保存它,因为以后再要获得它不容易。
reason:根据不同的时机,传入的值可能是下面的四个值中的一个:
DLL_PROCESS_ATTACH 动态链接库第一次插入进程的地址空间时。当传入的参数是该值时,您可以做一些初始化的工作。
DLL_PROCESS_DETACH 动态链接库从进程的地址空间卸出时。您可以在此做一些清理的工作。譬如:释放内存等。
DLL_THREAD_ATTACH 新线程生成。
DLL_THREAD_DETACH 线程销毁。
如果想要库中的代码继续执行,返回TRUE,否则返回FALSE,那样动态链接库就不会加载了。譬如:您想分配一块内存,如果不成功的话就退出,这时您就可以返回FALSE。那样动态链接库就不会加载了。
您可以加入的函数,它们的位置并不重要,把它们放在入口点函数的前面或后面都可以。只是如果您想要它们能被其它的程序调用的话,就必须把它们的名字放到模块定义文件(.def)中去。
模块定义文件.def,将由本工具自动为您生成,而无须您的干预。