您的位置:首页 > 其它

静态加载dll和动态加载dll

2014-07-02 16:14 267 查看
一,首先编写DLL (建win32空DLL工程)
头文件.h

extern "C" _declspec(dllexport) int Max(int a, int b); //extern "C"解决函数名由于不同编译器造成的名字匹配问题,通常c++编译器编译时会对函数进行改名,而c编译器不会

extern "C" _declspec(dllexport) int Min(int a, int b); //_declspec(dllexport)说明该函数为导出函数

实现文件.cpp
#include"TestDLL.h"

int Max(int a, int b)

{

return (a > b?a:b);

}

int Min(int a, int b)

{

return (a > b?b:a);

}

二,编程测试DLL的工程(建win32 空工程)
1,静态加载dll
a。将dll工程下的dll和lib文件拷到测试工程下
b。同时编写头文件.h
extern "C" _declspec(dllimport) int Max(int a, int b); //_declspec(dllimport)说明函数为导入函数

extern "C" _declspec(dllimport) int Min(int a, int b);
c。编写实现文件.cpp
#include "test.h"

#include <iostream>

using namespace std;

#pragma comment(lib,"TestDLL001.lib")

int main()

{

int a=Min(3,4);

cout<<a<<endl;

system("pause");

return 0;

}

2.动态加载dll(仅用包含dll文件,同时不需要.h文件和lib文件)
a。将dll工程下的dll文件拷贝到测试工程下
b。编写实现文件.cpp
#include <Windows.h> // 包含 HINSTANCE

#include <iostream>

using namespace std;
int main()

{

HINSTANCE his = LoadLibraryA("TestDLL001.dll"); //用于加载dll

typedef int(*pmin)(int a, int b);

pmin mmi=(pmin)GetProcAddress(his, "Min"); //GetProcAddress()用于获得函数地址

int aa=mmi(3,4);

cout<<aa<<endl;

FreeLibrary(his); //释放dll

system("pause");

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: