2010-07-27 28 views
15

Estoy tratando de obtener un ejemplo simple de trabajo usando gSoap, para VS2008.compilación gSoap con C++

que he hecho lo siguiente:

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

Y luego esto:

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

que produce muchos archivos. Mi carpeta del proyecto es el siguiente:

// 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 

Cuando construyo, consigo una gran cantidad de errores de enlace (externos sin resolver). No encuentro nada para enlazar (por ejemplo, no hay bibliotecas binarias): ¿qué me estoy perdiendo?

creo que esto puede tener algo que ver con lo siguiente de los documentos:

para completar la construcción, compilar y enlace de la soapC.cpp generado, soapcalcProxy.cpp y el Run- time gSOAP engine -lgsoap ++ (o use source stdsoap2.cpp en caso de que libgsoap ++. a tenga instalado ) con su código.

¿hay una biblioteca gsoap ++ para 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 ========== 

Respuesta

19

bien, para aquellos frustrados con los documentos en el sitio gSOAP, usando VS2008 para compilar un cliente rápida único ejemplo, he aquí los pasos (servidores son diferentes).

Generar el archivo de cabecera desde el WSDL: wsdl2h -o init.h http://bleh.com/myservice.asmx?WSDL

Generar los archivos del cliente de jabón:

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

garantizar que se añaden los archivos a su solución para la construcción:

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

Asegúrese de que, para cada uno de estos archivos, seleccione la opción del compilador "No usar encabezados precompilados". (Propiedades del archivo -> C++ -> Encabezados precompilados -> Crear/Usar encabezado precompilado).

Finalmente, agregue el archivo .nsmap generado para su proxy al stdafx.h (o en su main si su proyecto no usa encabezados precompilados).

He aquí una muestra que hace una consulta sencilla:

// 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; 
} 

esperanza esto ayude a alguien!

+1

Solo un comentario: el espacio de nombres debe agregarse a stdafx.cpp (no .h)! – Budda

+0

¿Quiere incluir el archivo .nsmap en stdafx.cpp? Intenté eso y no funciona – Alex

Cuestiones relacionadas