H
Hallo
Visual Studio 2005 / Windows XP - Windows Server 2003
Ich habe eine C++-Applikation, die via SOAP (implementiert mit gSOAP) auf einen Server zugreift. Dies funktioniert wunderbar in der Debug-Version, mit der Releaseversion habe ich aber Probleme. Zusätzlich läuft die Debugversion unter Windows XP, die Releaseversion und Windows Server 2003. Lässt sich leider nicht ändern.
Um dem Problem auf die Spur zu kommen habe ich ein Logfile eingebaut und dabei folgenden Unterschied fest gestellt.
-- START Methode 1 ----------------------------------
SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTons4__ArrayOfString(struct soap *soap, const char *tag, int id, ns4__ArrayOfString *const*a, const char *type)
{
id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_ns4__ArrayOfString);
if (id < 0) return soap->error;
return (*a)->soap_out(soap, tag, id, type);
}
-- ENDE Methode 1 ----------------------------------
Wenn ich hier das 0. Element von ns4__ArrayOfString (ein std::vector mit std::strings) anschaue steht das eine ID, z.B. 16 drin. Am Ende der Methode wird soap_out aufgerufen. Diese folgt als nächstes und ist eine Methode einer Klasse, im Unterschied zur vorhergehenden Methode, die offensichtlich keiner Klasse angehört.
-- START Methode 2 ----------------------------------
int ns4__ArrayOfString::soap_out(struct soap *soap, const char *tag, int id, const char *type) const
{
return soap_out_ns4__ArrayOfString(soap, tag, id, this, type);
}
-- ENDE Methode 2 ----------------------------------
Schaue ich mir hier das 0. Element des Vektors an, erhalt ich den String <SOH>3 <SOH>16 (<SOH> ist das Asciizeichen Start of heading). Zudem ist die Adresse dieses Element unterschiedlich zur obigen Methode. Offensichtlich geht also irgendwas schief beim Aufruf von soap_put (return (*a)->soap_out(soap, tag, id, type);), ich komme nur nicht drauf was.
Wie gesagt kann ich dieses Verhalten nur in der Release-Version feststellen, in der Debug-Version funktioniert es einwandfrei (gleicher String, gleine Memoryadresse).
Kann mir jemand einen Tipp geben, was das schief läuft?
Hat es was mit C/C++ zu tun?
Compiler- oder Linkereinstellungen?
Danke für jeden Hinweis.
Gruess
Hans