预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

在动态链接技术中,模块和程序是分离的,模块独立于程序而存在于另一个分离的dll文件中,这个dll文件是动态链接到程序中的。 那如何在vb中编写一个DLL程序呢? 首先,新建一个工程,然后先中“ActiveXDll”工程。 然后开始编辑,往程序中添加你需要的部件和控件。 编辑完成后,保存工程,工程一般是以“.vbp”文件保存,定义的类以“.cls”和“.vbw”文件保存,窗体以“.frm”文件保存,添加的模块一“.bas”文件保存……。 接着选择“文件”菜单,弹出下拉框,选中“生成.dll”选项,它就会在上面弹出一个进度条“正在生成.dll文件”。生成以后是一个有好象齿轮状的图标。 当你需要在其他的程序中调用这个dll的时候,需要在系统中注册一下,具体的过程是开始->运行->打开”C:\WINDOWS\system32\regsvr32.exe”,然后找到你要注册的控件的路径,添加在regsvr32.exe的后面。 如果你要引用,就开一个“标准EXE”工程,然后在“工程”选项中,单击“引用”,找到你刚才的“.dll”的文件名,在前面的复选框中打勾,就可以引用你刚才在那里面写的方法等。 PublicFunctionDllMain( hinstDLLAsLong,//long类型包含dll的instancehandle句柄.也是dll的模块句柄 fdwReasonAsLong,//常数标识,入口点为何被调用 lpwReservedAsLong//long类型提供关于DLL_PROCESS_ATTACH(DETACH)的信息 )AsBoolean fdwReason通常的取值 DLL_PROCESS_ATTACH(1) 进程装载了dll,每进程初始化要执行。AprocessisloadingtheDLL.Anyper-process initializationshouldbeperformed. DLL_THREAD_ATTACH(2) 进程交换(注入)一个新的线程,每线程初始化要执行。Theprocessisspawninganew thread.Anyper-threadinitializationshouldbeperformed. DLL_THREAD_DETACH(3) 一个线程结束。每线程清除要执行。Athreadisexiting.Anyper-threadcleanupshouldbe performed. DLL_PROCESS_DETACH(0) 一个进程断开dll链接,或者进程结束,每进程清除要执行。AprocessisdetachingtheDLL, ortheprocessisexiting.Anyper-processcleanupshouldbeperformed. lpvReserved 一个long类型提供更多关于DLL_PROCESS_ATTACH和DLL_PROCESS_DETACH的信 息.(如果fdwReason是DLL_THREAD_ATTACHorDLL_THREAD_DETACH,则该参数无用) 如果fdwReason是DLL_PROCESS_ATTACH,lpvReserved值无意义对于用函数 LoadLibraryandGetProcAddress装载dll,如果fdwReason是DLL_PROCESS_DETACH, lpvReserved值无意义,如果返回值是从Win32FreeLibraryfunction,lpvReserved值也无 意义,如果进程结束调用入口点. 函数的返回值只有在fdwReason是DLL_PROCESS_ATTACH才有意义,如果初始化成 功,函数返回true,否则返回false.因为这个函数是window调用的入口点.传入这个函数的 参数值是由windows决定.当一个线程被用win32TerminateThread函数和Win32 TerminateProcess函数结束,没有调用入口点. 要开发一个windowsdll,我们创建一个简单的数学函数库,下面代码存在一个.bas模块中名字:MathLib.bas OptionExplicit PublicConstDLL_PROCESS_DETACH=0 PublicConstDLL_PROCESS_ATTACH=1 PublicConstDLL_THREAD_ATTACH=2 PublicConstDLL_THREAD_DETACH=3 PublicFunctionDllMain(hInstAsLong,fdwReasonAsLong, lpvReservedAsLong)AsBoolean SelectCasefdwReason C