非托管com组件访问WebService

来源:互联网 发布:windows专业版激活工具 编辑:程序博客网 时间:2024/05/16 10:42

转载自: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 0
原创粉丝点击