Hallo Leute,
ich habe hier ein kurioses Problem. Folgende Konstruktion liegt vor : in einer Exe ist ein Datenmodul implementiert. Von einer
DLL aus soll auf dieses DM zugegriffen werden. ( In der
DLL liegen Druckaufbereitungsprogramme, Rave - Formulare und ähnliche, kundenspezifische Sachen, die beim Update nicht überschrieben werden sollen.)
Den Zugriff habe ich mir so vorgestellt, dass in der
DLL ein leeres DM erstellt wird. Aus der Exe wird eine
DLL-Prozedur gerufen, die das DM der Exe mit übergibt es dem leeren DM zuweist. Um Zugriff auf die Objekte des Exe - DM zur Designzeit zu haben muss ich dieses Teil in die Uses-Liste der
Dll und des leeren DM eintragen. Genau hier kommt es zum Crash. Sobald das Teil auch nur in der Uses - Liste der
DLL steht bekomme ich beim Programmende - Unbekannter Softwarefehler (0x0eedfade) an Stelle 0x77e7e592. Nachfolgend einige Code - Zeilen:
1.
DLL
Delphi-Quellcode:
library DruckDLL;
uses
Dialogs,
SysUtils,
Windows,
Forms,
Classes,
PAGK_PrtAngBlk in 'PAGK_PrtAngBlk.PAS' {FAGK_PrtAngBlk},
Globaldefs in '..\Globaldefs.pas',
SDDataModul in 'SDDataModul.pas' {DatenModul: TDataModule},
MainDataModul in '..\MainDataModul.pas' {IHSDataModul: TDataModule};
procedure Drucken_Angebot_Blanko(ModulInfo:TModulInfoRec; DataModul:TDataModule); stdcall;
begin
DatenModul.Init(ModulInfo,DataModul);
FAGK_PrtAngBlk:= TFAGK_PrtAngBlk.Create(nil);
try
FAGK_PrtAngBlk.ShowModal;
finally
FAGK_PrtAngBlk.Free;
end
end;
exports Drucken_Angebot_Blanko;
begin
Application.CreateForm(TDatenModul, DatenModul);
end.
2. Leeres Datenmodul
Delphi-Quellcode:
unit SDDataModul;
interface
uses
SysUtils, Classes, Globaldefs;
type
TDatenModul =
class(TDataModule)
private
{ Private-Deklarationen }
FModulInfo: TModulInfoRec;
FMDataModul: TDataModule;
public
{ Public-Deklarationen }
procedure Init(aModulInfo:TModulInfoRec; aDataModul:TDataModule);
property MDataModul: TDataModule
read FMDataModul;
property ModulInfo: TModulInfoRec
read FModulInfo
write FModulInfo;
end;
var
DatenModul: TDatenModul;
implementation
{$R *.dfm}
procedure TDatenModul.Init(aModulInfo:TModulInfoRec; aDataModul:TDataModule);
begin
FModulInfo:=aModulInfo;
FMDataModul:=aDataModul;
end;
end.
Momentan wird die
DLL nur von der Exe geladen. Nach Programmende kommt es zu obigem Crash. Ich habe leider keine Ahnung, wo ich noch suchen sollte.
Wenn jemand helfen kann, dann vielen Dank im voraus. Außerdem hoffe ich, dass ich das richtige Forum erwischt habe.
Gruß alfred