Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zugriff auf lokale Variablen bei Callback aus DLL (https://www.delphipraxis.net/144550-zugriff-auf-lokale-variablen-bei-callback-aus-dll.html)

kaju74 10. Dez 2009 16:00

Re: Zugriff auf lokale Variablen bei Callback aus DLL
 
...okay...so ganz verstanden habe ich es jetzt aber nicht...wie müsste ich dann meinen Code ändern?

Vielen Dank,
kaju

mkinzler 10. Dez 2009 16:02

Re: Zugriff auf lokale Variablen bei Callback aus DLL
 
Ganz einfach: (Freie)Funktion/Methode <> Methode einer Klasse.

Delphi-Quellcode:
unit MainFrm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, xpCore, xpPlugInMng;

type
{ TfrmMain }

  TfrmMain = class(TForm)
    btnTest: TButton;
    edtFirstName: TLabeledEdit;
    edtLastName: TLabeledEdit;
    mmoLog: TMemo;
    PlugInManager: TxpPlugInManager;
    procedure FormCreate(Sender: TObject);
    procedure PlugInManagerLoadPlugIn(Sender: TObject; PlugIn: TxpPlugIn);
    procedure PlugInManagerUnloadPlugIn(Sender: TObject; PlugIn: TxpPlugIn);
    procedure btnTestClick(Sender: TObject);
  private
    { Private-Deklarationen }
    FLocalVar: string;
  public
    { Public-Deklarationen }
  end;

var
  frmMain: TfrmMain;

  procedure CallbackProc(ActionGUID: string; CallbackInfo: Pointer);

implementation

uses
  SamplePlugInIntf;

{$R *.dfm}

procedure CallbackProc(ActionGUID: string; CallbackInfo: Pointer);
var
  CallbackStruct: PCallbackStruct;
begin
  ShowMessage('B: ' + frmMain.FLocalVar);
  CallbackStruct := CallbackInfo;
  ShowMessage('Callback called:' + #13#13 + Trim(CallbackStruct^.FirstName + #32 + CallbackStruct^.LastName));
end;
...

Phoenix 10. Dez 2009 16:05

Re: Zugriff auf lokale Variablen bei Callback aus DLL
 
Du übergibst nicht direkt Deine CallbackProc an die externe Dll, sondern die Rückgabe von MakeProcInstance(CallbackProc);

Die merkst Du Dir zudem vorher in einer Variable - und nachdem Du fertig bist und der Callback nicht mehr aufgerufen werden kann gibst Du diesen Pointer auch mit FreeProcInstance wieder frei. Sonst hast Du ein Memory-Leak von 15 bytes.

kaju74 10. Dez 2009 16:11

Re: Zugriff auf lokale Variablen bei Callback aus DLL
 
Hallo...

Danke, das werde ich mal ausprobieren - ihr seid spitze 8-))

Gruß,
kaju

kaju74 10. Dez 2009 17:14

Re: Zugriff auf lokale Variablen bei Callback aus DLL
 
Nochmal Hallo.

Also, ich habe jetzt mein PlugIn-System umgeschrieben und siehe da, nun funktioniert der Zugriff auf lokale Variablen ohne Umweg 8-))) Ich muss mich auch nicht selber um die Allocation und Deallocation des Speichers kümmern...super 8-)

Vielen Dank nochmal,
kaju


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 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