Windows标准DLL编译工具

来源:互联网 发布:淘宝减肥药事件 编辑:程序博客网 时间:2024/05/20 06:54

本资源来自网络,我只不过是稍加整理,谈不上原创,但亦非转贴、翻译,也只能选原创。。。

也曾在别的论坛发布过,仅是收集而已。。。

 

标准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,将由本工具自动为您生成,而无须您的干预。

 

 

原创粉丝点击