Windows下使用Dev C++ 编写dll与使用dll(一)C项目下的dll

Dev C++时很方便上手的东西,下载安装的exe,一路运行,即可成功安装,这里就不叙述下载及安装过程了。

实在是很方便,下载链接暂时也不贴了。

 

 

 打开编译器,文件->新建->项目

 

 

 这里先选择C项目,点击确定,即会自动生成一个.c和一个.h文件。

 

 

 

 

 

 

 

 

 

 这里自动生成的Hello()程序,一运行就会弹出一个信息框。

我们直接点击编译运行,保存文件后,就会生成一个dll文件。

 

 

 

注意右边的32位版本,很重要,因为编译生成的32位dll只能在32位编译器下调用,64位只能在64位编译器下调用。

 

这样,即代表成功生成dll文件,项目名为test1,这里生成了test1.dll

我们在这个目录下写一个test.cpp对这个dll进行测试。

#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
	typedef void (*Hello)();
	HMODULE hMod = LoadLibrary("test1.dll");
	if(hMod!=NULL)
	{
		cout<<"dll调用成功";
		Hello hello = (Hello)GetProcAddress(hMod,"HelloWorld");
		hello();
	}
	else
	{
		cout<<"dll调用失败";
	}
}

  直接点击编译运行。

 

 

运行成功,输出了调试语句以及HelloWorld()中弹出的信息框。

易语言调用dll命令就和这个是一样的。

C语言中要引入<windows.h>

用LoadLibrary()引入dll文件。

用GetProcAddress获取dll中指定函数名的函数地址,结合上面的typedef void (*Hello)()。表示引入一个无返回类型,也无参数的函数。

我们在dllmain.c中,再次添加一个add函数,如下:
DLLIMPORT int add(int a,int b)
{
	return a+b;
}

在dll.h中,添加如下定义,重新编译运行。
DLLIMPORT int add(int,int);
生成一个新的dll。

重新写一个新的test1.cpp。
代码如下。
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
	typedef int (*Hello)(int,int);
	HMODULE hMod = LoadLibrary("test1.dll");
	if(hMod!=NULL)
	{
		cout<<"dll调用成功<<endl";
		Hello hello = (Hello)GetProcAddress(hMod,"add");
		cout<<hello(5,6)<<endl;
	}
	else
	{
		cout<<"dll调用失败";
	}
}

 这样就表示引入一个返回整数类型,参数为两个整数类型的函数。

点击运行,结果如下:

 

 

如果我们把右上角改成64位的编译器,如图:

 

 

 再点击编译运行,就无法引入刚才的dll:

 

可见,dll的调用与生成与编译器的版本有很大关系,如果需要生成64位的dll,在编译生成dll中选择64位的编译器即可。

posted @ 2021-01-29 08:39  念秋  阅读(2926)  评论(0编辑  收藏  举报