Einzelnen Beitrag anzeigen

KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#5

Re: Problem mit Forms in DLLs und Packages

  Alt 11. Feb 2005, 13:06
Versuchs mal hiermit:

in der Unit controls.pas folgende Methode ergänzen:

Delphi-Quellcode:
function GetControlAtom : Pointer;

function GetControlAtom : Pointer;
begin
  Result := @ControlAtom;
end;
Jetzt brauchst Du noch 2 Methoden in der DLL, eine um den Wert zu setzen und eine um den alten Wert wiederherzustellen:

Delphi-Quellcode:
locOldAtom: Integer = -1;

function Init(iRealControlAtom : Integer): Boolean; stdcall;
var P: PWord;
begin
  Result := False;

  // TApplication ermittelt für das Verarbeiten einiger Messages die richtige Komponente
  // über einen globalen "Atom". Der ist aber leider prozesspezifisch. D.h., dass er in
  // einer Anwendung bestens funktioniert. Sobald aber (wie hier) eine DLL dazukommt
  // wird innerhalb der DLL ein neuer eigener "Atom" initialisiert. Um trotzdem richtig
  // arbeiten zu können teilen wir daher unserer DLL den "Atom" der Anwendung mit.
  // Dazu haben wir uns in "controls.pas" gehackt und die Datei um eine neue Methode
  // erweitert:
  // function GetControlAtom : Pointer;
  // begin
  // Result := @ControlAtom;
  // end;
  P := GetControlAtom;
  locOldAtom := P^;
  P^ := iRealControlAtom;

  Result := True;
end;

procedure Uninit;
var P: PWord;
begin
  if locOldAtom<>-1 then
  begin
    P := GetControlAtom;
    P^ := locOldAtom;
  end;
end;
Was da eigentlich passiert (und warum) steht ja oben im Quelltext als Kommentar.
  Mit Zitat antworten Zitat