Hallo wiedermal,
Also ich möchte aus einer
Unit, welche meine Fehlerbehandlung beinhaltet einen String an meine LoaderUnit senden. Hab auch eine eigentlich sehr schöne Variante von Luckie gefunden
hier, die ich auch so einbinden konnte, dass das Programm ohne Probleme funktioniert. Leider kommt der String aber anscheinend nicht wirklich an. Wo der Fehler liegt, kann ich derzeit noch nicht sagen, weil, wie gesagt, das Programm funktionstüchtig ist. hier mal die wichtigen Stellen in den beiden Units:
die FehlerUnit
Delphi-Quellcode:
type TDatenaustausch =
record
dwData, cdData: integer;
lpData:
string;
end;
...
function TFehler.AusFehlercode_Fehlermeldung_auslesen:
string;
var Datenaustausch: TDatenaustausch;
Handle: THandle;
begin
try
case iFehlercode
of
/////////////////////////////////////////////////////////////////////////////////////
// Systemnachrichten //
/////////////////////////////////////////////////////////////////////////////////////
0 : result := '
Initialisierung abgeschlossen.';
/////////////////////////////////////////////////////////////////////////////////////
// Verschiebetisch-Fehler //
/////////////////////////////////////////////////////////////////////////////////////
100 : result := '
Kommunikation mit Verschiebetisch wird aufgebaut';
101 : result := '
Die DLL der Verschiebetische ("MMC.DLL") konnte nicht gefunden werden.';
102 : result := '
Es ist ein Fehler beim Zugriff auf die Verschiebetisch-DLL aufgetreten.';
103 : result := '
Es konnte kein DLL-Handle für die Verschiebetisch-DLL gefunden werden.';
104 : result := '
Es ist ein Fehler beim Laden der Funktionen aus der Verschiebetisch-DLL aufgetreten.';
105 : result := '
Es konnte keine Kommunikationschnittstelle für die Verschiebetische gefunden werden.';
106 : result := '
Es ist ein Fehler beim Verbindungsaufbau mit den Verschiebetischen aufgetreten.';
107 : result := '
Verschiebetische sind nicht Verfügbar.';
108 : result := '
Bei der Verfügbarkeitsprüfung für die Verschiebetische sind Fehler gefunden worden.';
109 : result := '
Verschiebetische konnten nicht intialisiert werden.';
110 : result := '
Bei der Initialisierung der Verschiebetische ist ein Fehler aufgetaucht.';
// Die weiteren Fehlermeldungen werden eingeführt, wenn alle Geräte initialisiert sind
// und auch die Protokollierung erfolgt.
/////////////////////////////////////////////////////////////////////////////////////
// Piezo-Verschiebetisch-Fehler //
/////////////////////////////////////////////////////////////////////////////////////
200 : result := '
Kommunikation mit Piezoverschiebetisch wird aufgebaut';
201 : result := '
Die DLL des Piezotisch ("E816_DLL.dll") konnte nicht gefunden werden.';
202 : result := '
Es ist ein Fehler beim Zugriff auf die Piezotisch-DLL aufgetreten.';
203 : result := '
Es konnte kein DLL-Handle für die Piezotisch-DLL gefunden werden.';
204 : result := '
Es ist ein Fehler beim Laden der Funktionen aus der Piezotisch-DLL aufgetreten.';
205 : result := '
Es konnte keine Kommunikationschnittstelle für den Piezotisch gefunden werden.';
206 : result := '
Es ist ein Fehler beim Verbindungsaufbau mit dem Piezotisch aufgetreten.';
207 : result := '
Piezotisch ist nicht Verfügbar.';
208 : result := '
Bei der Verfügbarkeitsprüfung für den Piezotisch sind Fehler gefunden worden.';
209 : result := '
Piezotisch konnte nicht intialisiert werden.';
210 : result := '
Bei der Initialisierung des Piezotisch ist ein Fehler aufgetaucht.';
// Die weiteren Fehlermeldungen werden eingeführt, wenn alle Geräte initialisiert sind
// und auch die Protokollierung erfolgt.
/////////////////////////////////////////////////////////////////////////////////////
// ControlerBoard-Fehler //
/////////////////////////////////////////////////////////////////////////////////////
300 : result := '
Kommunikation mit ControlerBoard wird aufgebaut';
301 : result := '
Die DLL des ControlerBoards ("K8055D.DLL") konnte nicht gefunden werden.';
302 : result := '
Es ist ein Fehler beim Zugriff auf die ControlerBoard-DLL aufgetreten.';
303 : result := '
Es konnte kein DLL-Handle für die ControlerBoard-DLL gefunden werden.';
304 : result := '
Es ist ein Fehler beim Laden der Funktionen aus der ControlerBoard-DLL aufgetreten.';
305 : result := '
ControlerBoard konnte nicht intialisiert werden.';
306 : result := '
Bei der Initialisierung des ControlerBoard ist ein Fehler aufgetaucht.';
// Die weiteren Fehlermeldungen werden eingeführt, wenn alle Geräte initialisiert sind
// und auch die Protokollierung erfolgt.
end;
except
result := '
Es ist ein unbekannter Fehler aufgetreten!';
end;
with Datenaustausch
do
begin
dwData := 0;
cdData := Length(result) + 1;
lpData := result;
end;
SendMessage(LoaderForm.Handle, WM_COPYDATA, Longint(
Handle),
Longint(@Datenaustausch));
// <-- hier sollte der Datenaustausch stattfinden, dies funzt auch
end;
...
hier die wichtigen Teile der LoaderUnit
Delphi-Quellcode:
const Nachricht_erhalten = WM_COPYDATA;
type
TLoaderForm = class(TForm)
...
private
{ Private-Deklarationen }
procedure Nachricht_anzeigen(var MSG: TWMCopyData);message Nachricht_erhalten;
public
{ Public-Deklarationen }
end;
...
procedure TLoaderForm.Nachricht_anzeigen(var MSG: TWMCopyData);
var Datenaustausch: TDatenaustausch;
begin
HilfsLabel.Caption := String(PChar(Msg.CopyDataStruct.lpData)); // <--- hier sollte der Datenaustausch ankommen
AnzeigeLabel.Left := round((LoaderForm.Width-HilfsLabel.Width)/2);
AnzeigeLabel.Caption := HilfsLabel.Caption;
end;
...