非托管com组件访问WebService

转载自:http://www.cnblogs.com/virtorld/archive/2012/11/16/2773395.html

在Visual Studio 2008以及以后版本中,微软停止了非托管C++的直接WebService引用。不过ATL Server代码已经托管到开源网站上,我们可以找到ATL Server的源代码,编译出Sproxy.exe,这个工具可以根据wsdl文件来生成非托管的代理类。这个代理类还需要配合一些头文件才能一起使用,这个相关的头文件都包含在ATL Server 的源代码内。

1.   准备sproxy.exe工具

在vs2008以前的版本,比如vs2005,本身就带有这个命令,但在vs2008版,已经把它给去除了。需要去http://atlserver.codeplex.com/下载ATL_Server源代码并编译产生sproxy.exe工具。(我自己生成的sproxy.exe 百度网盘:http://pan.baidu.com/s/1c2inuZu)

2.   生成代理类

启动cmd,进入sproxy.exe目录,执行sproxy.exe / wsdl http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

生成WeatherWebService.h文件

3.   建立工程

3.1、头文件

  #include "iostream"

 

#include "WeatherWebService.h"

 

using namespace std;

 

3.2、代码示例

 // 设置中文区域

       setlocale(LC_ALL,"chs");

      

       CoInitialize(NULL);

       HRESULT hr = S_OK;

 

       WeatherWebService::CWeatherWebServiceT<CSoapSocketClientT<>>* mWeatherWS = new WeatherWebService::CWeatherWebServiceT<CSoapSocketClientT<>>;

      

       CComBSTR cityName = "北京";

       BSTR* weatherOut;

       int weatherSize;

 

       // 获取天气

       hr = mWeatherWS->getWeatherbyCityName(cityName,(BSTR**)&weatherOut,&weatherSize);

       if(FAILED(hr))

       {

              cout<<"getWeather fail!"<<endl;

       }

       else

       {

              for (int i=0;i<weatherSize;i++)

              {

                     wcout<<weatherOut[i]<<endl;

              }

       }

       if (mWeatherWS != NULL)

              delete mWeatherWS;

 

       CoUninitialize();




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值