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;
} 

运行结果:

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐