Thema: Delphi DLL Parameterübergabe

Einzelnen Beitrag anzeigen

bluescreen25

Registriert seit: 27. Nov 2005
Ort: Geldern
229 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: DLL Parameterübergabe

  Alt 22. Jun 2007, 13:57
Zitat von Muetze1:
Zitat von bluescreen25:
Ich bekomme einfach die procedure nicht angepeilt..
Den Fachbegriff "angepeilt" kenne ich noch nicht. Könntest du den näher erklären bzw. beschreiben wo es denn zZ noch hakt? Dann kann ich dir auch vllt. helfen.
Ok sorry für das Unfachmännische....

MainProg:

Delphi-Quellcode:
procedure GCallbackProcedure();
procedure DerDllDieAdresseMitteilen();
Delphi-Quellcode:
...
...
implementation



{$R *.dfm}

const
  dllname = 'vosk.dll';


procedure FormShowNormal(parent: Pointer); stdcall; external dllname;
procedure SetCallBack(ACallBack: Pointer); stdcall; external dllname;


procedure GCallbackProcedure();
begin
  ShowMessage('Form wurde geschlossen');
end;


procedure DerDllDieAdresseMitteilen();
begin
  SetCallBack(@GCallbackProcedure);
end;
...
...
Plus ein Aufruf von DerDllDieAdresseMitteilen.


Dll:

Delphi-Quellcode:
library vosk;

uses
  Windows,
  virtualosk in 'virtualosk.pas{frmOSK};

var
  DLLProcNext: procedure(Reason: Integer); stdcall;
  

exports
  FormShowModal,FormShowNormal,SetCallBack;

...

Delphi-Quellcode:
unit virtualosk;
...
...
var gCallBack: procedure()=nil;
...
...
procedure FormShowModal(parent: Pointer); stdcall;
function FormShowNormal(parent: Pointer): Pointer; stdcall;
procedure SetCallBack(ACallback: Pointer);stdcall;

implementation

{$R *.dfm}


procedure SetCallBack(ACallback: Pointer);
begin
  @gCallBack := ACallBack;
end;
...
...
procedure TfrmOSK.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned(gCallBack) then gCallBack();
  // Form beim Schließen freigeben
  Action := caFree;
  windows.SetActiveWindow(hForeground); //vor beenden den Focus zurück auf cAVe
end;

Hmm, so wie es jetzt ist, starte ich mein Hauptprogramm, rufe dort die Form aus der Dll auf, dann hängt es sich auf.


Gruß,bluescreen25
...und ich dachte, Delphi ist ein Programmgenerator mit nur einem Button......tzzz
  Mit Zitat antworten Zitat