2010-07-27 10 views
15

Sto cercando di ottenere un semplice esempio di lavoro con gSoap, per VS2008.gSoap compilation con C++

ho fatto la seguente:

wsdl2h -o Init.h http://myservices/InitalisationService.asmx?WSDL 

E poi questo:

soapcpp2 -I "C:\3pSDK\gsoap-2.7\gsoap\import" -i -C -limport Init.h 

che produce molti file. La mia cartella del progetto si presenta così:

// generated files 
Init.h 
InitalisationServiceSoap.initalizePlayer.req.xml 
InitalisationServiceSoap.initalizePlayer.res.xml 
InitalisationServiceSoap.nsmap 
InitalisationServiceSoap12.initalizePlayer.req.xml 
InitalisationServiceSoap12.initalizePlayer.res.xml 
InitalisationServiceSoap12.nsmap 
ortC.cpp 
ortH.h 
ortInitalisationServiceSoap12Proxy.cpp 
ortInitalisationServiceSoap12Proxy.h 
ortInitalisationServiceSoapProxy.cpp 
ortInitalisationServiceSoapProxy.h 
ortMatlab.c 
ortMatlab.h 
ortStub.h 

// Project Files 
ReadMe.txt 
stdafx.cpp 
stdafx.h 
WebServicesClient.cpp 
WebServicesClient.vcproj 
targetver.h 

// files added to the project from gSoap folder 
stdsoap2.cpp 
stdsoap2.h 
typemap.dat 

Quando costruisco, ho un sacco di errori del linker (esterni non risolti). Non riesco a trovare nulla da collegare (ad esempio, nessuna libreria binaria) - cosa mi manca?

credo che questo può avere qualcosa a che fare con il seguente dalla documentazione:

per completare la costruzione, compilare e link soapC.cpp generato, soapcalcProxy.cpp, e il run- tempo gSOAP engine -lgsoap ++ (o utilizzare la fonte stdsoap2.cpp nel caso in cui libgsoap ++. a sia non installato) con il proprio codice.

c'è una libreria gsoap ++ per win32?

1>Compiling... 
1>WebServicesClient.cpp 
1>ortC.cpp 
1>Generating Code... 
1>Linking... 
1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_faultcode referenced in function _http_response 
1>stdsoap2.obj : error LNK2001: unresolved external symbol _namespaces 
1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_getheader referenced in function _soap_recv_header 
1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_faultsubcode referenced in function _soap_set_fault 
1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_faultstring referenced in function _soap_set_fault 
1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_putfault referenced in function _soap_send_fault 
1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_putheader referenced in function _soap_send_fault 
1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_serializefault referenced in function _soap_send_fault 
1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_serializeheader referenced in function _soap_send_fault 
1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_getfault referenced in function _soap_recv_fault 
1>stdsoap2.obj : error LNK2019: unresolved external symbol _soap_faultdetail referenced in function _soap_set_error 
1>ortC.obj : error LNK2019: unresolved external symbol "void * __cdecl soap_class_id_enter(struct soap *,char const *,void *,int,unsigned int,char const *,char const *)" ([email protected]@[email protected]@[email protected]) referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * __cdecl soap_in_std__string(struct soap *,char const *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *,char const *)" ([email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z) 
1>ortC.obj : error LNK2019: unresolved external symbol "int __cdecl soap_putindependent(struct soap *)" ([email protected]@[email protected]@@Z) referenced in function "int __cdecl soap_put_std__string(struct soap *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const *,char const *,char const *)" ([email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) 
1>ortC.obj : error LNK2019: unresolved external symbol "int __cdecl soap_getindependent(struct soap *)" ([email protected]@[email protected]@@Z) referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * __cdecl soap_get_std__string(struct soap *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *,char const *,char const *)" ([email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z) 
1>ortC.obj : error LNK2019: unresolved external symbol "int __cdecl soap_fdelete(struct soap_clist *)" ([email protected]@[email protected]@@Z) referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > * __cdecl soap_instantiate_std__string(struct soap *,int,char const *,char const *,unsigned int *)" ([email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) 
1>ortC.obj : error LNK2019: unresolved external symbol "void __cdecl soap_default_int(struct soap *,int *)" ([email protected]@[email protected]@[email protected]) referenced in function "public: virtual void __thiscall _ns1__initalizePlayerResponse::soap_default(struct soap *)" ([email protected][email protected]@[email protected]@@Z) 
1>ortC.obj : error LNK2019: unresolved external symbol "int __cdecl soap_out_int(struct soap *,char const *,int,int const *,char const *)" ([email protected]@[email protected]@[email protected]) referenced in function "int __cdecl soap_out__ns1__initalizePlayerResponse(struct soap *,char const *,int,class _ns1__initalizePlayerResponse const *,char const *)" ([email protected]@[email protected]@[email protected]@[email protected]) 
1>ortC.obj : error LNK2019: unresolved external symbol "int __cdecl soap_ignore_element(struct soap *)" ([email protected]@[email protected]@@Z) referenced in function "class _ns1__initalizePlayerResponse * __cdecl soap_in__ns1__initalizePlayerResponse(struct soap *,char const *,class _ns1__initalizePlayerResponse *,char const *)" ([email protected]@[email protected]@[email protected]@[email protected]@Z) 
1>ortC.obj : error LNK2019: unresolved external symbol "int * __cdecl soap_in_int(struct soap *,char const *,int *,char const *)" ([email protected]@[email protected]@[email protected]) referenced in function "class _ns1__initalizePlayerResponse * __cdecl soap_in__ns1__initalizePlayerResponse(struct soap *,char const *,class _ns1__initalizePlayerResponse *,char const *)" ([email protected]@[email protected]@[email protected]@[email protected]@Z) 
1>G:\Prototypes\WebServicesClient\Debug\WebServicesClient.exe : fatal error LNK1120: 19 unresolved externals 
1>Build log was saved at "file://g:\Prototypes\WebServicesClient\WebServicesClient\Debug\BuildLog.htm" 
1>WebServicesClient - 20 error(s), 0 warning(s) 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

risposta

19

Va bene, per quelli frustrati con i documenti sul sito gSOAP, utilizzando VS2008 per compilare un veloce client unico esempio, ecco i passi (server sono diversi).

generare il file colpo di testa da WSDL: wsdl2h -o Init.h http://bleh.com/myservice.asmx?WSDL

Generare i file client SOAP:

soapcpp2 -C -IC:\3pSDK\gsoap-2.7\gsoap\import Init.h 

garantire si aggiungono i seguenti file per la soluzione per accumulo:

soapC.cpp, soapClient.cpp, and stdsoap2.cpp 

Verificare che, per ciascuno di questi file, si selezioni l'opzione del compilatore "Non si utilizzano le intestazioni precompilate". (Proprietà file -> C++ -> Intestazioni precompilate -> Crea/Usa intestazione precompilata).

Infine, aggiungi il file .nsmap generato per il tuo proxy allo stdafx.h (o nel tuo main se il tuo progetto non usa intestazioni precompilate).

Ecco un esempio che rende una semplice query:

// WebServicesClient.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include "init/soapInitServiceSoapProxy.h" 

#include <iostream> 
using namespace std; 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
std::string user = "AAAA"; 
std::string pass = "BBBB"; 

InitServiceSoap    service;  

_ns1__initPlayer   query; 
_ns1__initPlayerResponse ans; 

query.psParam1 = &user; 
query.psParam2 = &pass; 

if(service.__ns2__initPlayer(&query, &ans) == SOAP_OK) 
{ 
    cout << "success!" << endl;  
} 

cin.get(); 

return 0; 
} 

speranza che questo aiuta qualcuno!

+1

Solo un commento: lo spazio dei nomi deve essere aggiunto in stdafx.cpp (non .h)! – Budda

+0

intendi includere il file .nsmap nello stdafx.cpp? L'ho provato e non funziona – Alex