C++中dll(动态链接库)的生成与调用
·
dll文件,又称动态链接库,是经常用于封装函数或者资源,比如图标之类的。笔者就以Dev-C++为例,演示dll的生成与调用。
1.生成dll
打开Dev,找到文件->新建->项目:

然后选择dll:

这里项目名称我用的是test,大家也可以自己定,项目语言取决于自己的函数用的是什么语言。
创建项目并保存后,会有一个dllmain.cpp和一个dll.h:

dllmain.cpp:
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
DllClass::DllClass()
{
}
DllClass::~DllClass()
{
}
void DllClass::HelloWorld()
{
MessageBox(0, "Hello World from DLL!\n","Hi",MB_ICONINFORMATION);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
{
break;
}
case DLL_PROCESS_DETACH:
{
break;
}
case DLL_THREAD_ATTACH:
{
break;
}
case DLL_THREAD_DETACH:
{
break;
}
}
/* Return TRUE on success, FALSE on failure */
return TRUE;
}
dll.h:
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
#define DLLIMPORT __declspec(dllexport)
#else
#define DLLIMPORT __declspec(dllimport)
#endif
class DLLIMPORT DllClass
{
public:
DllClass();
virtual ~DllClass();
void HelloWorld();
};
#endif
这里面有dev-c++给我们的栗子,有一个HelloWorld函数。那怎么写自己的函数呢:
先删掉默认函数,以及头文件里除了绿色文字以外的所有文字,然后把自己的函数写成一下形式,放进dllmain.cpp里:
DLLIMPORT 返回值类型(参数)
{
函数代码;
}
比如我这里的add函数,把两个数相加:
DLLIMPORT int add(int a,int b)
{
return a + b;
}
然后把这个函数在dll.h里声明:
extern "C"
{
DLLIMPORT int add(int a,int b);
}
把所有函数做声明,然后把这段声明放在endif语句之前。写完后,按下F9编译(注意:windows.h和dll.h头文件不可删除,否则会报错),你就会在保存项目的路径下得到一个.dll:

和一个.def文件,里面写了你封装的函数名:

我就封装了一个加法函数和减法函数,分别为add和minus。
2.C++调用dll
dll生成了以后就到了调用了。把生成的dll放在一个单独的目录下,然后创建一个源代码,和dll放在同一目录下,比如我的test.cpp:

然后在你的源代码里写上以下内容:
#include<windows.h>//必须包含windows.h头文件
#include<iostream>
using namespace std;
int main()
{
int x,y;
typedef int (*ADD)(int a,int b);
HMODULE hMod = LoadLibrary("test.dll");//你的dll
if(hMod!=NULL)
{
cout<<"dll调用成功"<<endl;
ADD add = (ADD)GetProcAddress(hMod,"add");
cin>>x>>y;
cout<<"结果为:"<<add(x,y)<<endl;
system("pause");
}
else
{
cout<<"dll调用失败"<<endl;
system("pause");
}
return 0;
}
运行结果:


更多推荐



所有评论(0)