Problem mit Source, zum Verzweifeln!!!
-
Das hab ich jetzt net so ganz verstanden wie du das meinst, aber ich hab mal probiert an die CStrings ein \0 anzuhängen, das brachte allerdings keine Besserung...
-
Also da dürfte nix passieren, sCrc wird sicher nicht größer als 14...
-
Das hab ich jetzt net so ganz verstanden wie du das meinst, aber ich hab mal probiert an die CStrings ein \0 anzuhängen, das brachte allerdings keine Besserung...
Das was gemeint was, war eher lpBuffer. Der wird unter dem else in einen CString gestopf, sollte also 0-terminiert sind (lpBuffer, der CString macht das schon selbst).
Zu den buffern:
lpBuffer wird auch sicher nicht größer als 90 zeichen?
sTmp.Mid(sTmp.Find('=',0)+1,sTmp.Find(';',0)-sTmp.Find('=',0)); kann nie mehr als 5 zeichen zurückliefern?
alles sehr sehr gefährlich...
-
Die Daten für die Buffer werden aus einem Gerät gelesen und können laut Protokoll nicht größer werden... Sind sie laut Debugger auch nicht...
Das Programm läuft auf einem Pocket PC, hab die Buffer mal größer gemacht, bringt jedoch auch keine Besserung...
Nochmal konkret zu dem Problem: Ruf ich nach dieser Methode noch eine andere auf und übergib dieser z. B. den String "Hallo", so steht nachher in ihrem Übergabeparameter irgend ein alter Schrott aus der 1. Methode... Irgendwas muss da also beim Speicherzugriff gewaltig schief laufen!
-
die parameter leigen auf dem stack und das aufbauen/aufräumen des stacks ist sache der aufrufers icht des aufgerufenen. und ohne diese funktion funktioneiert es!? hmm....
-
Das lesen der Parameter funktioniert alles einwandfrei, danach ruf ich diese beiden Methoden auf:
void CParameterDlg::OnBtnWrite() { CString hmpf="hmpf"; WriteParams(hmpf,"hallo",10); } int CParameterDlg::WriteParams(CString sParamW, CString test, int nValue) { CString test=sParamW; }
in "test" sollte jetzt ja "hmpf" stehen, da stehen allerdings Teile verschiedener Strings aus der 1. Methode drin!!!! Ich verzweifel grad, bin seit 5 Stunden an dem Problem!!
-
muss oben natürlich "CString test2=..." heissen!
-
Sogar in der Methode OnBtnWrite() steht in der Variable hmpf nicht "hmpf" sondern Zeug aus der 1. Methode hab ich grad beim debuggen festgestellt!
-
das kann eigentlich gar net sein. CString hohl sich nen frischen speicher block, und kopiert dann "hmpf" rein. Debug dich mal in den konstukrot von CString sieh nach was da vor sich geht.
-
So, hab nochmal debugged und folgendes festgestellt:
Als Übergabeparameter für die ReadParams Methode hab ich ":ACCESS=0000;0E7F".
Die Buffer hab ich alle auf 1000 erhöht, da der Paramter ja länger ist als 14.Diese Funktion wird anschließend aufgerufen:
void CParameterDlg::OnBtnWrite()
{
CString test1="a";
CString test2="b";
CString test3="c";
CString test4="d";
CString test5="e";
CString test6="f";
CString test7="g";
CString test8="h";}
Folgendes steht in den CString Var.:
test1: "ACCESS=0000"
test2: "SS=0000"
test3: "000"
test4: "d"
test5 "e"
...??????????????????!!!!!!!!!!!!!!!!!!!!!!!
-
Ich weiss nicht warum, aber wenn ich der ReadParams Methode nen char* übergebe geht es plötzlich!!!!!!!!!!!!!