目录
一、DLL文件的创建
1. 创建一个空白DLL工程
2. 添加CPP文件,编辑如下内容后,并编译及build,生成Dll1.dll和Dll1.lib文件(在Debug目录下)
// 生成导出函数方法一:extern "C" __declspec(dllexport)
extern "C" __declspec(dllexport) int add(int a,int b){
return a+b;
}
extern "C" __declspec(dllexport) int sub(int a,int b){
return a-b;
}
/*
//生成导出函数方法二:def文件
int add(int a,int b){
return a+b;
}
int sub(int a,int b){
return a-b;
}
*/
二、DLL文件的导出函数
生成DLL文件的可读性的导出函数有两种方法,如上面代码所示。
查看导出函数方法,法一:用VC自带的dumpbin,法二:用PEid工具。
法一:用VC自带的dumpbin
法二:用PEid工具。
将DLL1.dll文件载入PEid工具里。
=====================DLL文件的调用前提准备========================
1.DLL文件的调用,首先创建一个Win Console Application工程 2.然后创建test.cpp文件,用以调用dll文件。
三、DLL文件的静态调用
(>-<) 不具体介绍了,直接看代码。
//test.cpp文件
//静态调用DLL 需将Dll1.lib和Dll1.dll文件放在和test.cpp放一块
#include<stdio.h>
#pragma comment(lib,"Dll1.lib")
extern "C" __declspec(dllimport) int add(int,int);
extern "C" __declspec(dllimport) int sub(int,int);
void main(){
int a=add(1,2);
int b=sub(2,1);
printf("add: %d\n",a);
printf("sub: %d\n",b);
}
四、DLL文件的动态调用
//test.cpp文件
//动态调用DLL 需知道Dll1.dll文件的导出函数的返回类型及参数类型 也需将Dll1.dll文件和test.cpp放一块
#include<stdio.h>
#include<windows.h>
typedef int(*myAdd)(int,int);
typedef int(*mySub)(int,int);
void main(){
HINSTANCE hm=LoadLibrary("Dll1.dll");
//HMODULE hm = LoadLibrary("Dll1.dll");
if(!hm){
printf("loadlibrary error\n");
}
myAdd myadd = (myAdd)GetProcAddress(hm,"add");
mySub mysub = (mySub)GetProcAddress(hm,"sub");
int a=myadd(1,2);
int b=mysub(2,1);
printf("add: %d\n",a);
printf("sub: %d\n",b);
}