2010-07-27 12 views
15

Ich versuche, ein einfaches Beispiel mit gSoap, für VS2008 arbeiten.gSoap Kompilierung mit C++

Ich habe folgendes getan:

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

Und dann dieses:

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

, die viele Dateien erzeugt. Mein Projektordner wie folgt aussieht:

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

Als ich bauen, ich habe eine Menge von Linker-Fehler (nicht aufgelöste externe) erhalten. Ich kann nichts finden, was verlinkt werden kann (z. B. keine Binärbibliotheken) - was fehlt mir?

Ich glaube, das könnte etwas mit den folgenden von der Dokumentation zu tun:

den Build zu vervollständigen, kompilieren und Link, um die erzeugte soapC.cpp, soapcalcProxy.cpp und die Lauf- Zeit gSOAP-Engine -lgsoap ++ (oder verwenden Sie Quelle stdsoap2.cpp, falls libgsoap ++. a ist nicht installiert) mit Ihrem Code.

Gibt es eine gsoap ++ Bibliothek für 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 ========== 

Antwort

19

Okay, für diejenigen, frustriert mit der Dokumentation auf der gSOAP Website, VS2008 unter Verwendung eines schnellen Client nur Beispiel zu kompilieren, hier die Schritte ist (Server sind unterschiedlich).

die Header-Datei aus dem WSDL generieren: wsdl2h -o Init.h http://bleh.com/myservice.asmx?WSDL

die Dateien Seife Client generieren:

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

Sie die folgenden Dateien, um Ihre Lösung für Build Stellen Sie sicher, hinzufügen:

Stellen Sie sicher, dass Sie für jede dieser Dateien die Compileroption "Keine vorkompilierten Header verwenden" auswählen. (Dateieigenschaften -> C++ -> Vorkompilierte Header -> Vorkompilierten Header erstellen/verwenden).

Schließlich fügen Sie die .nsmap-Datei, die für Ihren Proxy generiert wurde, zur Datei stdafx.h hinzu (oder in Ihrem main, wenn Ihr Projekt keine vorkompilierten Header verwendet).

Hier ist ein Beispiel, das eine einfache Abfrage macht:

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

Hoffnung das jemand hilft!

+1

Nur ein Kommentar: Namespace sollte in stdafx.cpp (nicht .h) hinzugefügt werden! – Budda

+0

meinst du die .nsmap-Datei in die stdafx.cpp aufzunehmen? Ich habe es versucht und es funktioniert nicht – Alex