C++ Builder6调用C#写的WebService出錯
C++ Builder6调用C#写的WebService出錯,提示:
Object reference not set to an instance of an object.
这个WebService用C#写的应用程序可以正常调用.
在网上找了一个WebService测试了下:
http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx
调用getMobileCodeInfo 函数
返回:手机号码错误 http://www.webxml.com.cn
C++ Builder代码:
Unit1.cpp
//---------------------------------------#include <vcl.h>#pragma hdrstop#include "Unit1.h"//---------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;//---------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){}//---------------------------------------_di_MobileCodeWSSoap TForm1::GetWebService(){ if(!ss) { HTTPRIO1->QueryInterface(ss); } return ss;}void __fastcall TForm1::Button1Click(TObject *Sender){ AnsiString mobileid = Memo2->Text.Trim(); if(getMobileCodeInfo) { Memo1->Text = "Mobile ID:" + mobileid; Memo1->Lines->Add(getMobileCodeInfo->getMobileCodeInfo(mobileid," ")); }}//---------------------------------------
//---------------------------------------#ifndef Unit1H#define Unit1H//---------------------------------------#include <Classes.hpp>#include <Controls.hpp>#include <StdCtrls.hpp>#include <Forms.hpp>#include <Rio.hpp>#include <SOAPHTTPClient.hpp>#include "MobileCodeWS.h"//---------------------------------------class TForm1 : public TForm{__published: // IDE-managed Components TMemo *Memo1; TEdit *Edit1; TMemo *Memo2; TButton *Button1; THTTPRIO *HTTPRIO1; void __fastcall Button1Click(TObject *Sender);private: // User declarationspublic: // User declarations __fastcall TForm1(TComponent* Owner); _di_MobileCodeWSSoap ss; _di_MobileCodeWSSoap GetWebService();__property _di_MobileCodeWSSoap getMobileCodeInfo = { read=GetWebService };};//---------------------------------------extern PACKAGE TForm1 *Form1;//---------------------------------------#endif
// ************************************************************************ //// The types declared in this file were generated from data read from the// WSDL File described below:// WSDL : http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl// Encoding : utf-8// Version : 1.0// (2009/9/16 上午 09:41:37 - $Revision: 1.0.1.0.1.82 $)// ************************************************************************ //#ifndef MobileCodeWSH#define MobileCodeWSH#include <System.hpp>#include <InvokeRegistry.hpp>#include <XSBuiltIns.hpp>#include <SoapHTTPClient.hpp>namespace NS_MobileCodeWS {// ************************************************************************ //// The following types, referred to in the WSDL document are not being represented// in this file. They are either aliases[@] of other types represented or were referred// to but never[!] declared in the document. The types from the latter category// typically map to predefined/known XML or Borland types; however, they could also // indicate incorrect WSDL documents that failed to declare or import a schema type.// ************************************************************************ //// !:string - "http://www.w3.org/2001/XMLSchema"typedef DynamicArray<AnsiString> ArrayOfString; /* "http://WebXml.com.cn/" */// ************************************************************************ //// Namespace : http://WebXml.com.cn/// soapAction: http://WebXml.com.cn/%operationName%// transport : http://schemas.xmlsoap.org/soap/http// binding : MobileCodeWSSoap// service : MobileCodeWS// port : MobileCodeWSSoap// URL : http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx// ************************************************************************ //__interface INTERFACE_UUID("{48CFEB9F-FF3E-298B-BA04-DD79C8DC675C}") MobileCodeWSSoap : public IInvokable{public: virtual AnsiString getMobileCodeInfo(const AnsiString mobileCode, const AnsiString userID) = 0; virtual ArrayOfString getDatabaseInfo() = 0; };typedef DelphiInterface<MobileCodeWSSoap> _di_MobileCodeWSSoap;_di_MobileCodeWSSoap GetMobileCodeWSSoap(bool useWSDL=false, AnsiString addr="");#endif // __MobileCodeWS_h__}; // NS_MobileCodeWS#if !defined(NO_IMPLICIT_NAMESPACE_USE)using namespace NS_MobileCodeWS;#endif
// ************************************************************************ //// The types declared in this file were generated from data read from the// WSDL File described below:// WSDL : http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl// Encoding : utf-8// Version : 1.0// (2009/9/16 上午 09:41:37 - $Revision: 1.0.1.0.1.82 $)// ************************************************************************ //#include <vcl.h>#pragma hdrstop#if !defined(MobileCodeWSH)#include "MobileCodeWS.h"#endifnamespace NS_MobileCodeWS {_di_MobileCodeWSSoap GetMobileCodeWSSoap(bool useWSDL, AnsiString addr){ static const char* defWSDL= "http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl"; static const char* defURL = "http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx"; static const char* defSvc = "MobileCodeWS"; static const char* defPrt = "MobileCodeWSSoap"; if (addr=="") addr = useWSDL ? defWSDL : defURL; THTTPRIO* rio = new THTTPRIO(0); if (useWSDL) { rio->WSDLLocation = addr; rio->Service = defSvc; rio->Port = defPrt; } else { rio->URL = addr; } _di_MobileCodeWSSoap service; rio->QueryInterface(service); if (!service) delete rio; return service;}// ************************************************************************ //// This routine registers the interfaces and types used by invoke the SOAP// Service.// ************************************************************************ //static void RegTypes(){ /* MobileCodeWSSoap */ InvRegistry()->RegisterInterface(__interfaceTypeinfo(MobileCodeWSSoap), L"http://WebXml.com.cn/", L"utf-8"); InvRegistry()->RegisterDefaultSOAPAction(__interfaceTypeinfo(MobileCodeWSSoap), L"http://WebXml.com.cn/%operationName%"); RemClassRegistry()->RegisterXSInfo(__arrayTypeinfo(ArrayOfString), L"http://WebXml.com.cn/", L"ArrayOfString");}#pragma startup RegTypes 32}; // NS_MobileCodeWS