AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Variable verliert Wert nach der Zuweisung

Ein Thema von Luckie · begonnen am 28. Sep 2007 · letzter Beitrag vom 28. Sep 2007
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Variable verliert Wert nach der Zuweisung

  Alt 28. Sep 2007, 10:58
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:
s1 := 'Test';
ShowMessage(hDlg, s1);
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.

Benutze ich SetString:
SetString(s1, PwIDEChar('Test'), 4); geht es.

Was ist da los?

Ich werde noch mal irre, jetzt geht es wieder nicht mehr.

So sieht es aus:
Delphi-Quellcode:
ShowMessage(hDlg, GetItemTextW(hDlg, ID_EDT_COMP_X));
Computer := GetItemTextW(hDlg, ID_EDT_COMP_X);
User := GetItemTextW(hDlg, ID_EDT_ACCOUNT_X);
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).

Entwicklungsumgebung ist D6 Professional.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#2

Re: Variable verliert Wert nach der Zuweisung

  Alt 28. Sep 2007, 11:00
Hallo

Kannst du die ganze funktion schicken incl VAR parameter etc ...
Peter Schaible
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Variable verliert Wert nach der Zuweisung

  Alt 28. Sep 2007, 11:12
Siehe mein Edit oben:

Delphi-Quellcode:
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;
Und die Deklaration:

Delphi-Quellcode:
var
    Computer : WideString;
Mehr ist es nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Variable verliert Wert nach der Zuweisung

  Alt 28. Sep 2007, 11:26
Neuer Versuch: Ich habe es jetzt so:
Delphi-Quellcode:
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$',
In beiden ShowMessages steht der Computername, aber im Funktionsaufruf von ConnectToNetWorkDriveW steht dann "nicht verfügbarer Wert", wen ich dort mit dem Debugger stoppe.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Variable verliert Wert nach der Zuweisung

  Alt 28. Sep 2007, 12:27
Hallo

Mal so ein Gedanke ... Unerklärliches ist oftmals auf SpeicherÜberschreiber zurückzuführen ...

Könntest du mal probieren bei
Delphi-Quellcode:
GetDlgItemTextW(hParent, ID, p, len+1);
        SetString(s, p, len+1);
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.

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 ?
Peter Schaible
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz