关闭

静态加载dll和动态加载dll

标签: dll编译器测试c编程
15187人阅读 评论(0) 收藏 举报
分类:

一,首先编写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;
}

 

 

 

 

 

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:286988次
    • 积分:3246
    • 等级:
    • 排名:第10452名
    • 原创:65篇
    • 转载:39篇
    • 译文:0篇
    • 评论:29条
    文章分类