Einzelnen Beitrag anzeigen

bubuu

Registriert seit: 1. Jun 2010
Ort: Stäfa
6 Beiträge
 
Delphi 7 Professional
 
#1

Definition DLLProc-Variable in Delphi7

  Alt 1. Jun 2010, 16:34
Hallo,
Ich habe zig Foren etc. durchpflügt und meinte begriffen zu haben, wie man ein DLL mit Hilfe einer call-back Funktion initialisieren kann. Mein Dll - etwas abgekürzt - sieht so aus:
Delphi-Quellcode:
library Rpc_2;


uses
  System, SysUtils, Classes, Windows,
  AT91def in 'AT91def.pas',
  RPC in 'RPC.pas',
  Link in 'Link.pas{CIF};

{$R *.res}
var
  DLLProcNext: procedure(Reason: Integer); stdcall = nil;
  DLLProc: TDLLProc;

// exported functions ==========================================================

  function WhoAmI(var v: Cardinal; var s: PChar): EStatus; stdcall; export;
  var str: string;
  begin
    Result := Remote.WhoAmI(v, str);
    s := PChar(str);
  end;

  function SetROMP(irom: TIROM): EStatus; stdcall; export;
  begin
    Result := Remote.SetROMP(irom);
  end;

  function GetROMP( var irom: TIROM; var romstatus: Cardinal ): EStatus; stdcall; export;
  begin
    Result := Remote.GetROMP(irom, romstatus);
  end;


exports
  WhoAmI, SetROMP, GetROMP;

// initialisation routine called by system =====================================

  procedure IniRpc(Reason: Integer); stdcall;
  begin
    case Reason of
      DLL_PROCESS_ATTACH:
        DisableThreadLibraryCalls(hInstance);
      DLL_THREAD_ATTACH:
      ;
      DLL_THREAD_DETACH:
      ;
      DLL_PROCESS_DETACH:
      ;
    end;
    if Assigned(DLLProcNext) then DLLProcNext(Reason);
  end;

begin
    DLLProcNext := Pointer(InterlockedExchange(Integer(DLLProc), Integer(@IniRpc)));
    IniRpc(DLL_PROCESS_ATTACH);
end.
Wenn ich das compiliere, so kriege ich Fehler wegen des Typs TDLLProc. Ersetze ich diesen Typ durch Pointer, so kommt der Fehler, weil die Systemvariable DLLProc Delphi 7 nicht bekannt ist.
Frage 1: Wo sind TDLLProc und DLLProc definiert und wie komm ich da ran?

Die Variable CIF, definiert in der Unit Link.pas müsste initialisiert werden. Das würde man wohl nach dem Aufruf von disableThreadLibraryCalls-Aufruf in IniRpc machen - aber
Frage 2:Wie das? Bei einer Application sieht das ja so aus:
  Application.CreateForm(TCIF, CIF); und in einer DLL?
Mit Dank und Gruss bubuu
  Mit Zitat antworten Zitat