Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wert aus Klasse nicht verfügbar (https://www.delphipraxis.net/145042-wert-aus-klasse-nicht-verfuegbar.html)

sx2008 23. Dez 2009 18:10

Re: Wert aus Klasse nicht verfügbar
 
Zitat:

Zitat von Ruio
Und zu array[0..999999] of Char;
Ein Dynamisches Array ging da nicht und weil ich nocht weiß wie viel da mal versendet wird ist das erstmal 999999 groß.

Das geht doch eleganter und resourcensparender mit SetString():
Delphi-Quellcode:
procedure Tt4rCore.ReceiveAppMessage(var Msg: TWMCopyData);
var
  sText: string;
begin
...
  SetString(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData); // Daten in String kopieren
  ReceiveAppMessageCallback(Sender,Action, sText);
end;

Ruio 23. Dez 2009 20:19

Re: Wert aus Klasse nicht verfügbar
 
Zitat:

Zitat von sx2008
Zitat:

Zitat von Ruio
Und zu array[0..999999] of Char;
Ein Dynamisches Array ging da nicht und weil ich nocht weiß wie viel da mal versendet wird ist das erstmal 999999 groß.

Das geht doch eleganter und resourcensparender mit SetString():
Delphi-Quellcode:
procedure Tt4rCore.ReceiveAppMessage(var Msg: TWMCopyData);
var
  sText: string;
begin
...
  SetString(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData); // Daten in String kopieren
  ReceiveAppMessageCallback(Sender,Action, sText);
end;

Danke!
Das kommt davon, wenn man noch nicht weiß, was der Code überhaupt macht.

Nur leider bleibt die AV:
Zitat:

---------------------------
t4rappdemosatellite
---------------------------
Zugriffsverletzung bei Adresse 00457C53 in Modul 't4rAppDemoSatellite.exe'. Lesen von Adresse 00000000.
---------------------------
OK
---------------------------

Ruio 24. Dez 2009 10:52

Re: Wert aus Klasse nicht verfügbar
 
Ich hängs mal an, vielleicht findet jemand den Fehler.

hugo1990 24. Dez 2009 12:17

Re: Wert aus Klasse nicht verfügbar
 
Ich würds gern testen, aber leider fehlen mir diese beiden Units:
dirs, HTMLColorConversions

Edit:
beim Codeüberfliegen habe ich den Fehler gefunden:

Delphi-Quellcode:
procedure TMainForm.ReceiveAppMessage(var Msg: TWMCopyData);
begin
  t4r.ReceiveAppMessage(Msg);
end;
Du stellst nicht sicher, dass t4r an dieser Stelle bereits erzeugt wurde. Wenn jetzt eine Nachricht empfangen wird, bevor t4r erzeugt wurde, gibt es eine Zugriffsverletzung.

Das hier sollte Abhilfe schaffen:
Delphi-Quellcode:
procedure TMainForm.ReceiveAppMessage(var Msg: TWMCopyData);
begin
  if t4r <> nil then
    t4r.ReceiveAppMessage(Msg);
end;
oder

Delphi-Quellcode:
procedure TMainForm.ReceiveAppMessage(var Msg: TWMCopyData);
begin
  if t4r = nil then
  begin
    t4r := Tt4r.Create(MainForm.Caption);
    t4r.ReceiveAppMessage(Msg);
  end;
end;
Edit2:
Außerdem solltest du das folgende nicht im OnShow sondern im OnCreate aufrufen:
Delphi-Quellcode:
  t4r := Tt4r.Create(MainForm.Caption);
  t4r.InitForm;

Ruio 24. Dez 2009 12:51

Re: Wert aus Klasse nicht verfügbar
 
Zitat:

Zitat von hugo1990
beim Codeüberfliegen habe ich den Fehler gefunden:
[delphi]
Das hier sollte Abhilfe schaffen:
Code:
procedure TMainForm.ReceiveAppMessage(var Msg: TWMCopyData);
begin
  if t4r <> nil then
    t4r.ReceiveAppMessage(Msg);
end;
oder

Code:
procedure TMainForm.ReceiveAppMessage(var Msg: TWMCopyData);
begin
  if t4r = nil then
  begin
    t4r := Tt4r.Create(MainForm.Caption);
    t4r.ReceiveAppMessage(Msg);
  end;
end;

Dann kommen ja die Messages nicht durch bzw. create ichh meine Klasse ja nochmal.
Ich werds ein bisschen umschreiben und nochmal testen.



Edit: Es geht jetzt!
:thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 Uhr.
Seite 2 von 2     12   

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