DllBuild

所属分类:钩子与API截获
开发工具:Visual Basic
文件大小:16KB
下载次数:8
上传日期:2011-11-07 17:21:30
上 传 者yuki55066
说明:  VB成生标准DLL库.包括原代码,调用例子
(vb create static dll)

文件列表:
vbBuildForm.frm (5882, 2006-12-06)
DllTest\DllTest.def (56, 2007-01-11)
DllTest\DllTest.dll (20480, 2007-01-11)
DllTest\DllTest.exp (659, 2007-01-11)
DllTest\DllTest.lib (1996, 2007-01-11)
DllTest\DllTest.txt (336, 2007-01-11)
DllTest\DllTest.vbp (696, 2007-01-11)
DllTest\DllTest.vbw (31, 2007-01-11)
DllTest\Module1.bas (3152, 2007-01-11)
DllBuild.vbp (1181, 2007-01-11)
DllBuild.vbw (56, 2007-01-11)
LINK.exe (24576, 2007-01-11)

一、如何使用标准DLL编译工具 使用方法很简单。首先,将C:\Program Files\Microsoft Visual Studio\VB***\link.exe改名为link2.exe 其次,将本文件link.exe复制到C:\Program Files\Microsoft Visual Studio\VB***文件夹中即可。 本工具让你即可使用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,将由本工具自动为您生成,而无须您的干预。

近期下载者

相关文件


收藏者