DLL初窥
经常看到dll文件,自己却未曾使用过。今天我们来写一个简单的程序,以调用dll文件。这个程序通过调用add.dll文件,来进行加法运算。
首先要认识 __declspec(dllexport) :
声明一个导出函数,即这个函数要从该dll导出,所以有:
// add.h
#ifndef DLL_H
#define DLL_H
extern "C" int __declspec(dllexport) add(int x,int y);
#endif
// add.cpp
#include "add.h"
int add(int x,inty)
{
returnx+y;
}
这样在dll文件中,一个导出函数就写好了。
在写个使用dll的程序:
#include <iostream>
#include <windows.h>
using namespace std;
typedef int(*lpAddFun)(int, int); // 宏定义函数指针类型
int main(int argc,char**argv)
{
HINSTANCE hDll; // DLL句柄
lpAddFun addFun; // 函数指针
hDll = LoadLibrary("add.dll");
if(hDll!=NULL)
{
addFun =(lpAddFun)GetProcAddress(hDll, "add");
if(addFun != NULL)
{
int result = addFun(2, 3);
cout << result<< endl;
}
FreeLibrary(hDll);
}
int c;
cin >> c;
return0;
}
这样一个调用dll文件的程序诞生啦!(原来挺简单的嘛!)
PS:
LoadLibrary函数载入指定的动态链接库,并将它映射到当前进程使用的地址空间。一旦载入,即可访问库内保存的资源。载入成功则返回库模块的句柄,失败返回0。参数为要载入的动态链接库的名称。用完之后,用FreeLibrary函数释放dll。
GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址。函数原型:
FARPROC GetProcAddress(
HMODULE hModule, // DLL模块句柄
LPCSTR lpProcName // 函数名
);
本实例源代码下载地址: