Einzelnen Beitrag anzeigen

alfred

Registriert seit: 17. Mai 2004
31 Beiträge
 
#1

Problem mit dem Datenmodul

  Alt 4. Jul 2005, 12:01
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
  Mit Zitat antworten Zitat