静态加载dll和动态加载dll
2014-04-16 13:07
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;
}
头文件.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;
}
相关文章推荐
- 动态加载DLL和静态加载DLL的步骤
- 静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件。
- 静态与动态加载Dll [示例代码]
- 动态链接库dll的 静态加载 与 动态加载
- [C-C++]DLL之旅2 : 调用DLL(静态&动态加载)
- 静态加载dll和动态加载dll
- [转载] 动态链接库dll的 静态加载 与 动态加载
- 建立WIN32 DLL,并使用静态加载和动态加载
- 静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件。
- dll库动态加载vs静态加载
- 静态加载dll,动态加载dll及常见问题处理
- vc静态加载dll和动态加载dll
- 动态链接库dll的 静态加载 与 动态加载
- 静态链接与动态加载DLL
- 动态链接库dll的静态加载与动态加载
- 动态(静态)加载DLL注意
- Symbian DLL,Lib(动态加载动态库,静态加载动态库,静态加载静态库)
- DLL的静态加载和动态加载
- vc静态加载dll和动态加载dll(转)
- 静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件。