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