分类: LINUX
2009-09-09 17:22:00
8.4 如何用gSOAP的#module指令构建模块和库
#module指令被用来构建模块。一个库能用一个模块和链接多个Web服务应用程序构建起来。该指令应该出现在头文件的顶部,并具有以下格式:
#module "name" 和 #module "name" "fullname"
这模块的name必须是唯一的短名。name对大小写不敏感,并且不能超过4个字符。如果全名存在,代表了模块的全名。
该头文件其他内容包括类型声明以及可选的远程方法和SOAP头文件/fault代码。 When the gSOAP compiler processes the header file module, it will generate the source codes for a library. The Web services application that uses the library should use a header file that imports the module with the #import directive.该头文件其他内容包括类型声明以及可选的远程方法和SOAP头的声明/故障。当gSOAP编译器编译这头文件的模块时,它会产生一个库的源代码。 Web服务应用程序使用该库应用到一个头文件,这个头文件用#import指令导入这模块。
例如:
/* Contents of module.h */
#module "test"
long;
char*;
struct ns__S
{
... }
该module.h头文件声明了一个long, char* 和一个struct ns__X。该模块名称是“test”,因此gSOAP编译器为这些类型生成一个带有序列化(反序列化)的testC.cpp文件。该testC.cpp库可以单独汇编和联接一个应用程序,这个应用程序来源于一个用#import“module.h导入“module.h”文件的头文件。当你想建立一个库,你也应该编译testClient.cpp文件,这个库包括您在模块头文件中定义的远程方法。
模块的导入有一些限制。一个模块必须导入到另一模块的头使用该模块的内容,你必须把这个import语句放在文件中的所有其他声明,包括其他import(除非这些也模块)之前。它也建议把所有基本数据类型定义放在根模块导入层次的,例如使用typedef声明XSD类型(见10.3节)。
您不能使用一个模块单独建立一个SOAP或XML的应用程序。也就是说,在gSOAP头文件的最后导入链不应该是一个模块。
当多个模块被联系起来,它们的类型必须被声明在一个模块中,仅为了能够避免名称冲突和链接错误。您不能创建两个模块共享相同类型的声明和链接的模块。当这些模块必须联系起来时,必要时,应考虑创建一个模块的层次结构,这样的类型声明只有一次并且只能在一个模块中。