从Visual Studio 2010中打开SofiaSIP解决方案。在libsofia_sip_ua工程下的Header Files/win32 headers子目录下可以看到su_configure.h文件。我本来想选取su_types.h头文件来先分析。但我在su_types.h头文件的开始处看到了su_configure.h头文件。这让我想到任何一个工程,照理说都应该有一个初始确定环境信息的头文件。同理,对一个模块来说也应该有一个初始确定环境信息的头文件。因此,我就又将目标转向了su_configure.h文件。
在看过SofiaSIP的辅助文档之一 - 源码文件结构后,再来看SofiaSIP里的源码就稍微有一些经验了。现在知道在头文件的开始处可以看到如下所示注释信息的作用了:
/**@file su_configure_win32.h
*
* @b su library configuration for WIN32 (VC6/VC98)
*
* The file <su_configure_win32.h> contains configuration information needed
* by WIN32 programs using @b su library.
*
* @author Pekka Pessi <Pekka.Pessi@nokia.com>
*
* @date Created: Thu Jan 18 15:30:55 2001 ppessi
*/
紧跟@b之后的内容是描述此文件的概述信息:su库的针对WIN32平台的配置。接下来的一段是详细描述:此头文件包含的是使用su库的WIN32程序所需的配置信息。
下面这句的作用相信应该都清楚:包括它后可以加快编译速度。
#define WIN32_LEAN_AND_MEAN
然后是下面这两句注释。这里的注释信息是说:如果需要将整个工程编译成DLL那么得移出这句(注释掉等同于移出)。现在的工程是libsofia_sip_ua,查看其属性里的配置类型,确实是”动态库(.dll)“。
/* Remove this when building DLL */
/* #define LIBSOFIA_SIP_UA_STATIC */
接着是七个#define。前面三个的用意应该很明显,是否是在WIN32平台(是)、是否有WINSOCK(是)和是否有WINSOCK2(是)。后面四个都是否:有POLL(否,因为是在WINDOWS平台)、有BSDSOCK(否),有STDINT(否,WIN32平台下没有标准的整型数据定义头文件。C99标准定义了stdint.h、inttypes.h,用于统一的跨平