在苹果(iphone,ipad)中使用gSoap
2012-11-27 15:32:27| 分类: gSoap | 标签: |举报 |字号大中小 订阅
gSoap现在已经支持在苹果中进行开发,以下以一个例子的方式简单介绍一下如何使用(其实还是比较简单的)。
例子为C++的方式。
1、根据描述文件生成需要的代理文件,命名空间文件等在苹果(iphone,ipad)中使用gSoap - xzhoumin - MMZHOU的博客
在苹果(iphone,ipad)中使用gSoap - xzhoumin - MMZHOU的博客
生成如下文件:
在苹果(iphone,ipad)中使用gSoap - xzhoumin - MMZHOU的博客
2、在XCode中创建一个iOS的工程
在苹果(iphone,ipad)中使用gSoap - xzhoumin - MMZHOU的博客
注意不要勾选ARC,因为gSoap的ios插件不支持这种方式,如果这里勾选了,需要在工程配置中自己修改
在苹果(iphone,ipad)中使用gSoap - xzhoumin - MMZHOU的博客
在苹果(iphone,ipad)中使用gSoap - xzhoumin - MMZHOU的博客
添加一个圆角按钮,修改名称为计算加法
在苹果(iphone,ipad)中使用gSoap - xzhoumin - MMZHOU的博客
用鼠标右键将按钮拖到ViewController.m文件中,生成按钮方法,修改各种属性如下图,点击Connect生成
在苹果(iphone,ipad)中使用gSoap - xzhoumin - MMZHOU的博客
3、将步骤1生成的6个文件(除了calc.h)加入到苹果的工程中,将文件gsoapios.h和gsoapios.mm加入到苹果的工程中(来源:gsoap-2.8\gsoap\ios_plugin\ios_plugin),将文件stdsoap2.h和stdsoap2.cpp(来源:gsoap-2.8\gsoap) 加入到苹果的工程中
在苹果(iphone,ipad)中使用gSoap - xzhoumin - MMZHOU的博客
将工程中的3个后缀为m的文件改名为mm,最后工程如下图:
在苹果(iphone,ipad)中使用gSoap - xzhoumin - MMZHOU的博客
4、实现逻辑
修改main.mm文件,增加包含命名空间文件,#import “calc.nsmap”
//
// main.m
// calc
//
// Created by test on 12-11-27.
// Copyright © 2012年 pop. All rights reserved.
//
#import <UIKit/UIKit.h>
#import “AppDelegate.h”
#import “calc.nsmap”
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
修改ViewController.mm文件,增加按钮的实现代码,当然,需要包含IOS插件头文件和代理头文件
//
// ViewController.m
// calc
//
// Created by test on 12-11-27.
// Copyright © 2012年 pop. All rights reserved.
//
#import “ViewController.h”
#import “gsoapios.h”
#import “soapcalcProxy.h”
@interface ViewController ()
@end
@implementation ViewController
-
(void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
} -
(void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} -
(IBAction)calcAdd {
calcProxy pxy;
int iRet = soap_register_plugin(&pxy,soap_ios);
if(SOAP_OKiRet)
{
double dbResult;
iRet = pxy.add(4.1, 3.5, dbResult);
if (SOAP_OKiRet) {
NSLog(@“结果是:%g”,dbResult);
}
}
}
@end
编译时出现的一个插件bug,修改DLog为NSLog即可解决
在苹果(iphone,ipad)中使用gSoap - xzhoumin - MMZHOU的博客
运行结果:
在苹果(iphone,ipad)中使用gSoap - xzhoumin - MMZHOU的博客
经过测试,不使用插件也可以正常运行,经过查看插件说明(gsoap-2.8\gsoap\ios_plugin\ios_plugin\docs\html\index.html),
However, it’s default network connection does not leverage the advantages of network connection offered by iOS SDK, instead it uses lower level TCP sockets for network connection.
就是说,插件仅仅是用苹果的SDK的网络通讯类替代了gsoap的底层socket通讯。因为本人仅仅是在有线情况下测试,对于WIFI,3G/4G没有进行测试,因此不知道是否在无线情况下必须使用插件。
其它说明:
1、原来以为gsoap不支持苹果下的开发,因此还找过
wsdl2objc
http://code.google.com/p/wsdl2objc/downloads/list?q=label:Featured
但此工程已经很久没有维护,最后的版本是WSDL2ObjC-0.7-pre1.zip
2、ios插件的说明文件中详细介绍了C方式和C++方式两种的例子。本文只是按照使用说明实践了一下C++的方式,希望给想在苹果下使用gsoap的童鞋们一些帮助。
3、希望ios插件开发者尽快修改适用于ARC方式的版本,因为这是发展趋势。
附:环境说明
苹果版本:10.8.3
XCODE版本:4.5.1
gSoap版本:2.8.11