先简单说一下这篇小文的目的。其实纯粹是因为上一篇文章《将C语言源代码编译成动态链接库》里面介绍了用命令行工具(cl、link或gcc)创建动态链接库,但程序员在实际工作中用得最多的还是IDE,所以有必要说说在IDE里面怎么做这件事。
创建动态链接库,那就直接用C++好了,Visual C++多么强大。但是我喜欢C语言胜过喜欢C++,所以打算看看如何用纯C来创建动态链接库。
工具依然选择Visual C++ 2010 Express,种种好处不再一一敷述。
我们现看看怎么用C++创建动态链接库,再看看怎么用C创建动态链接库。
我们在Visual C++ 2010 Express里面,分别用 C++ 和 C 来把下面这个简单的函数封装到动态链接库(DLL)里面:
int sum(int a, int b) { return a + b; }
一、Visual C++ 2010 Express Tips: 用 C++ 创建动态链接库
Step 1:创建Win32 Console Application
本例中我们创建一个叫做“Test”的Solution。
Step 2:将Application Type设定为DLL
在接下来的 Win32 Application Wizard 的 Application Settings 中,将 Application type 从 Console application 改为 DLL:
Step 3:将方法暴露给DLL接口
现在在这个Solution中,目录和文件结构是这样的:
编辑 Test.cpp 如下:
#include "stdafx.h" extern "C" { __declspec(dllexport) int sum(int a, int b) { return a + b; } }
Step 4:编译
直接编译即可。
二、Visual C++ 2010 Express Tips: 用 C 创建动态链接库
下面我们用C来创建DLL。
前两步和用C++创建DLL是完全一样的:
Step 1:创建Win32 Console Application
本例中我们创建一个叫做“Test”的Solution。
Step 2:将Application Type设定为DLL
在接下来的 Win32 Application Wizard 的 Application Settings 中,将 Application type 从 Console application 改为 DLL:
Step 3:更改编译选项
现在我们在此Project的Properties里面,找到 Configuration Properties | C/C++ | Advanced | Compile As 把这一项从默认设置(Default)更改为Compile as C Code (/TC)
然后,再在此Project的Properties里面,找到 Configuration Properties | C/C++ | Precompiled Headers | Precompiled Header 把这一项从默认的 Use(/Yu) 更改为Create(/Yc)
Step 4:删掉/重命名.cpp文件,增加.c文件
现在在这个Solution中,目录和文件结构是这样的(当然现在和C++的例子完全一样,但是马上我们所删除/重命名.cpp文件):
现在,我们这样做:
现在我们的solution的目录和文件结构是这样的:
Step 5:将方法暴露给DLL接口
编辑 Test.c 如下:
#include "stdafx.h" __declspec(dllexport) int sum(int a, int b) { return a + b; }
和C++的代码相比,由于现在已经是纯C语言的环境了,所以不再需要 extern "C" 这个申明了。
Step 6:编译
直接编译即可。
参考文献: