Win32下动态链接库(DLL)编程

本文深入探讨了Windows下的动态链接库(DLL)编程,包括DLL的作用、结构、导出导入函数、隐式和显式链接、DLLMain函数、搜索路径以及DLL的类型如Non-MFC和Extension DLL。同时,提到了资源DLL的创建和使用方法。
摘要由CSDN通过智能技术生成

主题:DLL是Windows最重要的组成要素,Windows中的许多新功能、新特性都是通过DLL来
实现的,因此掌握它、应用它是非常重要的。
动态链接库不仅可以作为一个运行模块,包括函数代码,而且可以包含程序以外的任何数据
或资源(位图、图标等等)。动态链接库就是给应用程序提供函数或者资源。
DLL是一种磁盘文件(通常带有DLL扩展名),它由全局数据、服务函数和资源组成,
在运行时被系统加载到进程的虚拟空间中,成为调用进程的一部分。在运行时,只有当EXE
程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。每个进程都复
制了自己的读/写全局变量。如果想要与其它进程共享内存,必须使用内存映射文件或者声
明一个共享数据段。DLL模块需要的堆栈内存都是从运行进程的堆栈中分配出来的。
DLL文件中包含一个导出函数表。这些导出函数由它们的符号名和称为标识号的整数与外界联系起来。


导入导出函数:
在DLL代码中,必须像下面这样明确声明导出函数:
__declspec(dllexport) int MyFunction(int n);
但也可以在模块定义(DEF)文件中列出导出函数,不过这样做常常引起更多的麻烦。在应用程序方面,要
求像下面这样明确声明相应的输入函数:
__declspec(dllimport) int MyFuncition(int n); (这是隐式链接dll)
仅有导入和导出声明并不能使应用程序内部的函数调用链接到相应的DLL文件上。应用程序的项目必须为
链接程序指定所需的输入库(LIB文件)。而且应用程序事实上必须至少包含一个对DLL函数的调用。
隐式链接和显式链接dll

显式:typedef double(SQRTPROC)(double);

HINSTANCE hInstance; //设置全局变量用于存储DLL句柄
SQRTPROC* pFunction; 第二个变量ShowMe是指向DLL,库中函数的指针
VERIFY(hInstance=::LoadLibrary("c://winnt//system32//mydll.dll"));
VERIFY(pFunction=(SQRTPROC*)::GetProcAddress(hInstance,"SquareRoot"));
double d=(*pFunction)(81.0);//调用该DLL函数
隐式: 程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值