![]() |
Variable verliert Wert nach der Zuweisung
Ich habe hier ein mir unerklärliches Phänomen. Ich habe eine lokale WideString-Variable s1. Dieser weise ich einen Wert zu und lasse sie mir direkt in der nächsten Zeile ausgeben:
Delphi-Quellcode:
Das ganze findet in einer Dialogprozedur statt. Ist aber unerheblich, weil die Prozedur nicht verlassen wird zwischen den beiden Zeilen. Allerdings ist s1 leer. Im Debugger steht "nicht verfügbarer Wert" und die MessageBox ist leer. Optimierung habe ich schon ausgeschaltet.
s1 := 'Test';
ShowMessage(hDlg, s1); Benutze ich SetString:
Delphi-Quellcode:
geht es.
SetString(s1, PwIDEChar('Test'), 4);
Was ist da los? Ich werde noch mal irre, jetzt geht es wieder nicht mehr. So sieht es aus:
Delphi-Quellcode:
In ShowMessage wird alles noch richtig angezeigt, also GetItemText funktioniert, aber wenn er bei User := ist, und ich halte die Maus über Computer, wird mir "nicht verfügbarer Wert" angezeigt (die Variable wird später noch benutzt). :wall:
ShowMessage(hDlg, GetItemTextW(hDlg, ID_EDT_COMP_X));
Computer := GetItemTextW(hDlg, ID_EDT_COMP_X); User := GetItemTextW(hDlg, ID_EDT_ACCOUNT_X); Entwicklungsumgebung ist D6 Professional. |
Re: Variable verliert Wert nach der Zuweisung
Hallo
Kannst du die ganze funktion schicken incl VAR parameter etc ... |
Re: Variable verliert Wert nach der Zuweisung
Siehe mein Edit oben:
Delphi-Quellcode:
Und die Deklaration:
function GetItemTextW(hParent: THandle; ID: Integer): WideString;
var p : PWideChar; len : Integer; s : WideString; begin s := ''; len := SendDlgItemMessageW(hParent, ID, WM_GETTEXTLENGTH, 0, 0); if len > 0 then begin try p := GetMemory(len+1); if Assigned(p) then begin GetDlgItemTextW(hParent, ID, p, len+1); SetString(s, p, len+1); end; finally FreeMemory(p); end; end; result := s; end;
Delphi-Quellcode:
Mehr ist es nicht.
var
Computer : WideString; |
Re: Variable verliert Wert nach der Zuweisung
Neuer Versuch: Ich habe es jetzt so:
Delphi-Quellcode:
In beiden ShowMessages steht der Computername, aber im Funktionsaufruf von ConnectToNetWorkDriveW steht dann "nicht verfügbarer Wert", wen ich dort mit dem Debugger stoppe.
ShowMessage(hDlg, GetItemTextW(hDlg, ID_EDT_COMP_X));
Computer := SysAllocString(PWideChar(GetItemTextW(hDlg, ID_EDT_COMP_X))); ShowMessage(hDlg, Computer); //User := GetItemTextW(hDlg, ID_EDT_ACCOUNT_X); //PW := GetItemTextW(hDlg, ID_EDT_PW_X); //DisconnectNetworkDrivew(CurComputer); ret := ConnectToNetworkDriveW('', Computer + '\IPC$', |
Re: Variable verliert Wert nach der Zuweisung
Hallo
Mal so ein Gedanke ... Unerklärliches ist oftmals auf SpeicherÜberschreiber zurückzuführen ... Könntest du mal probieren bei
Delphi-Quellcode:
die stellen "len+1" nur "len" zu verwenden ? Auch wenn die Länge dann nicht stimmen sollte, wäre interessant ob dann der gleiche Fehler auftritt.
GetDlgItemTextW(hParent, ID, p, len+1);
SetString(s, p, len+1); Desweiteren check doch mal alle stellen wo du was mit "Computer" machst. Du hats den Speicher dynamisch dazu anlegen lassen, verwendust du auch die richtigen free mthoden dafür ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz