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位的编译器即可。