如何从0到1编写一个dll文件本人小白一枚,由于刚刚开始接触dll,文件编写,苦于不知道如何进行编写,再加上对工具的不熟悉,查了很久的资料,经过了好几天的摸索,才勉勉强强掌握了一点点怎么写dll文件,这里就记录一下,如何编写我们的dll文件,然后成功的链接到我们的程序中去。
对于编译dll文件,有两种,一种是使用我们强大的环境,vs ,另一种就是使用我们强大的编译器gcc。这里对于这两种方式进行简单的演示。
gcc编译链接dll文件对于gcc,我们首先写三个文件
一个头文件head.h,这个头文件很有必要,一方面在dll文件中的表明我们要导出哪些函数,在main.c文件中表明dll文件中被导出的文件有哪些。
1234567891011#ifdef __cplusplusextern "C" //指定某个函数按照 C 语言方式编译和链接。在 C++ 中,函数名会被编译器进行名称修饰(name mangling),以支持函数重载和命名空间等特性。而在 C 语言中,函数名没有被修饰{#endif __declspec(dllexport) int add(int a, int b); //导出函数(格式)//声明了该函数将被导出到 DLL 文件中,以便其他程序可以使用。其它程序可以通过 DLL 导出表来查找这个函数,从而进行调用。#ifdef __cplusplus}#endif
一个要编译成dll的文件,mydll.c
1234567#include
最后一个我们要执行的程序,main.c
12345678#include
准备工作做完了,开始进行我们的gcc编译
首先,先将我们的mydll.c文件编译成mydll.dll形式
1gcc -shared -o mydll.dll mydll.c
之后再将dll文件链接到我们的main.c中形成main.exe文件
1gcc -o main.exe main.c -L . -l mydll
L 表示链接库的目录(这里我们是本目录下,以输入得是 . ),-l(小写L)表示链接库名称(编译器会自动添加.dll或者.so后缀)
这样就完成了我们的dll文件编写与链入
我们main.exe就会输出
运用万能的vs来进行编译首先我们创建一个空项目
我们在这个文件下,再创建一个新的项目,用来写我们的dll文件
分别创建两个源文件,就先前gcc那样
在main.c里面写
123456789101112131415161718192021222324#include
注意这里的名称需要一样,生成的dll文件名称是按照项目名称来的
在mydll中写
123456789101112131415#include
下面在mydll项目右键,点击属性
将配置类型设置为dll文件
最后一般生成解决方案
找到文件夹执行我们的main.exe文件
大功告成
注意:我们函数运用的是win32的函数,因此我们生成的可执行文件也需要是32位文件,因此可能我们需要调整将这里调为x86就会生成32位程序了。(x64是生成64位程序)