Visual C++ 2010 Express Tips: 用 C 和 C++ 创建动态链接库

先简单说一下这篇小文的目的。其实纯粹是因为上一篇文章《将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文件):

现在,我们这样做:

  1. 将 dllmain.cpp 重命名(Rename)成 dllmain.c 
  2. 将 Test.cpp 重命名(Rename)成 Test.c 
  3. 删除 stdafx.cpp (Remove --> Delete)

 

现在我们的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:编译

直接编译即可。

 

参考文献:

  1. 将C语言源代码编译成动态链接库 http://blog.csdn.net/xinyaping/article/details/7284899
  2. Visual C++ 2010 Express Tips: 编写C语言程序 http://blog.csdn.net/xinyaping/article/details/6833679

 

 

 

你可能感兴趣的:(C,Visual,Studio,C++)