![]() |
Plugin-DLL für ein USBLCD soll Daten an Hauptprogramm senden
Ich hab eine LCD-Display-Steuerung entwickelt, mit dem man ein Display mit 128 * 64 Pixeln per USB an einem PC anschließen kann und dafür auch eine Software geschrieben. (Wer die ct liest kennt das Projekt ja) Erweiterungen sollten per Plugin-DLLs die Software erweitern, das fuktioniert auch ganz prima. Doch sollen die DLLs selbstständig Daten an das Hauptprogramm schicken. Wie kann man das realisieren und vieleicht noch dabei ein Control mit in die DLL übergeben. Ich habe das probiert in dem ich folgende Zeilen verwendet habe:
Delphi-Quellcode:
Und im Hauptprogramm:
var Controller: TrageVC;
Procedure InitDLL(cntrl:Pointer);stdcall; begin Controller:= Pointer^; end;
Delphi-Quellcode:
Auf diese Art und Weise habe ich gehofft, daß ich von der DLL heraus das Control benutzen könnte. Aber leider gibt es ausser einer ASV nichts brauchbares.
InitDll(Pointer(Controller);
Sicherlich könnte man das mit einer Callback-Routine erledigen, aber alles was hier im Forum darüber gelesen hat mich auch nicht unbeding weiter gebracht. |
Re: DLL soll Daten selbstständig an das Hauptprogramm schick
Hi,
wegen den Schutzverletzungen: hast du sowohl im Hauptprogramm als auch in der DLL die Unit ShareMem eingebunden? Du brauchst den Speichermanager von Delphi, damit du Pointer-Typen problemlos verwenden kannst. Chris |
Re: DLL soll Daten selbstständig an das Hauptprogramm schick
Da kann ich helfen :)
Erst der Code für die DLL:
Delphi-Quellcode:
Jetzt die Exe:
var
listen: procedure(command: integer; msg: PChar); begin @listen:=derpointer; listen(c,args); end;
Delphi-Quellcode:
Edit: Mei mir geht es ohne Sharememprocedure mylisten(command: integer; msg: PChar); begin // mach was end; begin derpointer:= @mylisten; end; |
Re: Plugin-DLL für ein USBLCD soll Daten an Hauptprogramm se
Callback ist das einzige was da wirklich gut wäre.
Mit einer Callback schleife kannst du Compiler unabhängig einbindungen realisieren. Hier mal ein Beispiel. Deklaration der Callback Schleife:
Delphi-Quellcode:
Dann die funtion in der DLL:
var MyCallback: procedure(const Param1: Integer; const Param2: WideString); stdcall;
Delphi-Quellcode:
Dann willst du ja irgendwann mal aus deiner DLL daten ans Hauptprogramm schicken:
function AssignCallback(Callback: Pointer): Boolean; stdcall; export;
begin Result := Assigned(Callback); if (Result) then MyCallback := Callback; end;
Delphi-Quellcode:
Dynamischer Load und Einbindung ins Hauptprogramm:
function ProcRun: Boolean;
var x: Integer; p: WideString; begin x := 100; p := 'Test'; if Assigned(MyCallback) then MyCallback(x, p); end;
Delphi-Quellcode:
fertig.
var xAssignCallback:function (callback: Pointeger): Boolean; stdcall;
. . @xAssignCallback := GetProcAddress(hDll, 'AssignCallback'); . . Hauptprogramm: procedure OnMyCallback(const Param1: Integer; const Param2: WideString); stdcall; begin end; Procedure FormLoad(Sender: Tobject); begin xAssignCallback(OnMyCallback); end; gruß Andi |
Re: Plugin-DLL für ein USBLCD soll Daten an Hauptprogramm se
Hey, Danke an Euch alle schonemal. Da habe ich ja gleich ein paar Lösungsansätze, zumal mir die von andimx glaube ich am allerbesten gefällt. Ich werde das mal ausprobieren und dann melde ich mal Erfolg oder Mißerfolg.
Vielen Dank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:04 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