当前位置: 首页 > 编程技术 > 正文

编写第一个dll调用程序

很多时候我们选择将我们需要实现的功能的具体的代码或者类书写在一个DLL里面,但是新手苦于不知道如何编写一个dll,并且成功的调用dll

这篇文章将演示如何编写一个简单的dll和调用自己编写的dll

首先是编写一个dll

编写dll需要创建一个dll工程,这里不论是WIN32的DLL还是MFC DLL都可以,

创建一个dll工程

输入工程的名称,进入下一步,直接选择创建一个空的工程,然后点击完成即可:

创建一个空的dll工程

接下来的工作和编写一个exe文件的步骤差不多,创建一个源文件(当然规范的话可以创建一个头文件,用于说明和声明)->编写具体的代码

比如我编写了一个小小的对话框函数,代码如下:

#include <iostream>
#include <windows.h>
using namespace std;
#define DLL_API extern "C"_declspec (dllexport)
DLL_API int test(){
	int ClickBoxReturn = MessageBox(NULL,"这是一个测试对话框","注意",MB_YESNO);
	if(ClickBoxReturn == IDYES){
		MessageBox(NULL,"你点击了Yes","注意",MB_OK);
		return 0;
	}
	else {
		if(ClickBoxReturn == IDNO){
			MessageBox(NULL,"你点击了NO","注意",MB_ICONWARNING);
			return 1;
		}
	}
}

这里特别注意到一点是平时声明函数不同的是,函数前面有了一个DLL_API关键词,这个关键词的代码定义是:

#define DLL_API extern "C"_declspec (dllexport)

这里使用了宏定义,定义了DLL_API为extern “C”_declspec (dllexport)
当然也可以不用宏定义,但是这样的代价就是函数前要添加extern “C”_declspec (dllexport)这么长一串代码
另外extern “C”_declspec (dllexport) 指定了按照c语言的方式来导出,这样就可以解决dll导出函数名称不是原来的函数名称的问题了

另外,这里有另外的一个方法,比如这里我对DLL_API进行了宏定义,那么新建一个def文件,在文件中写入下面的内容,也可以解决

解决dll导出函数名称不是原来的函数名称的问题:

DLL_API
           test

编译并链接程序,如果没有语法错误的话,那么会在工程目录下面发现一个dll和lib文件

到此,DLL的编写告一段落

接下来是DLL的调用:
1.将lib文件和dll文件拷贝到新建的exe工程根目录下
2.编写exe文件的代码。比如我编写的内容如下:

#include <iostream>
#include <windows.h>
using namespace std;
#pragma comment (lib,"dlltest")
extern "C"_declspec (dllimport) test() ;
int main()
{

	while(1){
		if(test()){
			break;
		}

	}

	return 0;
}

这里特别注意到的是和普通的exe程序编写不同的是,这里增加了两行代码:

#pragma comment (lib,"dlltest")
extern "C"_declspec (dllimport) test() ;

这里的第一句#pragma comment (lib,”dlltest”)是一个链接命令
第二个声明了test为一个外部的dll导入函数,并且同样适用的是C语言的方式,这样以来就可以成功的调用DLL了

总结下:
编写DLL:
1.编写DLL时,在源文件的预处理处,增加如下内容:

#define DLL_API extern "C"_declspec (dllexport)

2.在每个函数的前面添加DLL_API关键词

编译链接DLL程序

调用DLL程序
1.在预处理处添加如下的两行或多行代码(具体的数量依照函数的个数而定):

#pragma comment (lib,"dlltest")
extern "C"_declspec (dllimport) test() ;

这样就可正常的调用DLL了



本文固定链接: http://kuaile.in/archives/812 | 蒲公英的博客

该日志由 蒲公英 于2012年04月06日发表在 编程技术 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 编写第一个dll调用程序 | 蒲公英的博客
关键字: ,

编写第一个dll调用程序:等您坐沙发呢!

发表评论


You must enable javascript to see captcha here!

快捷键:Ctrl+Enter