Ben. Haltepunkt bei einfacher Funktion...
-
Hi,
ich arbeite hier mit DLLs und irgendwo da scheint auch das Problem zu liegen, daher weiß ich nicht, ob das Forum hier richtig gewählt ist, WinAPI kam mir irgendwie nicht richtig vor, MFC auch nicht, vielleicht ist es ein DLL Problem, vielleicht aber auch Standard-C++.
Das Problem ist, dass ein benutzerdefinierter Haltepunkt, wie VC es nennt, aufgerufen wird.
Durch Debugging konnte ich die Stelle genau markieren, zwischen:lower(strProcess); // hier
DLL string lower(const string& s) { string temp(s); MessageBox(0, "a1", "", 0); for(string::iterator it = temp.begin(); it != temp.end(); ++it) { if(*it >= 'A' && *it <= 'Z') *it -= 'A' - 'a'; } MessageBox(0, "a2", "", 0); // und hier return s; }
Anzumerken ist, dass lower eine Funktion einer DLL ist und die Messagebox zum Debugging gedacht ist. Das return s ist hier nur ebenfalls zum Debugging gedacht.
Jedenfalls taucht die Box auf und danach findet der benutzerdefinierte Haltepunkt statt, das kann ich absolut nicht nachvollziehen, der Rückgabewert wird doch nicht abgefangen.
Noch verwunderlicher ist, wenn ich die Funktion der DLL entwende und so verwende, gibt es keine Probleme, hier noch die Header der DLL.#ifndef PARSE_ #define PARSE_ #include <string> using namespace std; #ifdef PARSE_EXPORTS #define DLL __declspec(dllexport) #else #define DLL __declspec(dllimport) #endif DLL string lower(const string& s);
Eine weitere Seltsamkeit ist, dass es sich hierbei offensichtlich um ein Problem mit dem String handelt, denn die Funktion wird genau zwei mal aufgerufen, beim zweiten Aufruf gibt es das Problem. Ich ließ den ersten Aufruf mit dem gleichen String mal zwei Male erfolgen: Kein Problem
Es liegt also auch nicht an der Anzahl der Aufrufe.:Global!services@euirc.net NOTICE QuanturasXP :[☻Logon News☻ - Nov 02 2003] All Austrian (.at) Users please use ☻irc.vie.at.euirc.net☻ - all Swiss (.ch) Users please use ☻irc.bas.ch.euirc.net☻
Dies ist der String, der dem Programm das Genick bricht.
Aber wie gesagt, wenn ich die lower-Funktion bei mir direkt im Programm, also nicht durch eine DLL, einbaue, funktioniert es.
Ich habe dabei die Funktion lower innerhalb des Programms _lower genannt und rufe diese vor dem lower-Aufruf auf.Hier noch der Assemblercode aus näherer Umgebung:
77F65519 mov dword ptr [ebp-20h],eax 77F6551C push dword ptr [ebp+14h] 77F6551F push dword ptr [ebp+10h] 77F65522 push dword ptr [ebp+0Ch] 77F65525 push dword ptr [ebp+8] 77F65528 call eax 77F6552A mov dword ptr [ebp-24h],eax 77F6552D or dword ptr [ebp-4],0FFFFFFFFh 77F65531 call 77F65541 77F65536 mov eax,dword ptr [ebp-24h] 77F65539 call 77F949DD 77F6553E ret 10h 77F65541 cmp dword ptr [ebp-1Ch],0 77F65545 je 77F6554F 77F65547 push dword ptr [ebp-1Ch] 77F6554A call 77F507D6 77F6554F ret 77F65550 ret 4 77F65553 int 3 77F65554 int 3
Ich bin wirklich ratlos, hat jemand eine Idee?
MfG Eisflamme
-