Einzelnen Beitrag anzeigen

Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#7

Re: DLL + DataModule in Objektinspektor

  Alt 23. Apr 2006, 15:45
Hallo,

ich habe mir jetzt schon mehrmals den kompletten Beitrag gelesen und komme nicht weiter. Ich habe auch versucht den Code hier :

Delphi-Quellcode:
library myDLL;

uses
  ShareMem,
  MyDatenmodul in 'MyDatemodul.pas{MyDatenmodul: TDataModule},
...

resourcestring
  //-- Datenbank DLL Vorgaben -------------------------------------------------
  dllPath = 'plugins';
  //-- Datenbank DLL Fehlermeldungen ------------------------------------------
  dllPathError = 'Der PlugIn Ordner %s konnte nicht erstellt werden';
  dllCoInitError = '%s hat einen CoInitialize-Fehler gemeldet!';
  dllDMCreateError = '%s hat einen Fehler beim Erzeugen des Datenmoduls %s gemeldet!';

{$R *.RES}
   
var DLLProcNext : procedure(Reason: Integer); stdcall = nil;
      bDoCoUninitialize : Boolean;
      bDoDestroyDM_ADO : Boolean;

// ============================================================================
// Interne - Hilfsfunktionen
// ============================================================================

// ----------------------------------------------------------------------------
// function DBInit: Integer; stdcall;
// ----------------------------------------------------------------------------
// Funktion...: Alle Eemente der DLL initialisieren bzw erzeugen
// Parameter..: keine
// Erreichbar.: intern
function DBInit: boolean; stdcall;
var sMsg: string;
begin
  Result := true; try;
    //-- ActivX initialisieren ------------------------------------------------
    sMsg:= Format(dllCoInitError, [dllName]);
    CoInitialize(nil); bDoCoUninitialize := True;
    //-- Datenmodul erzeugen --------------------------------------------------
    sMsg:= Format(dllDMCreateError, [dllName, DatTable]);
    MyDatenmodul:= TMyDatemodul.Create(Application);
  except; ShowMessage(sMsg); Result := false; end;
end;
// ----------------------------------------------------------------------------
// function DBUnInit: Integer; stdcall;
// ----------------------------------------------------------------------------
// Funktion...: Datenmodul deinitialisieren
// Parameter..: keine
// Erreichbar.: intern
function DBUnInit: boolean; stdcall;
begin
  Result := true;
  bDoCoUninitialize := false;
  bDoDestroyDM_ADO := false;
  try
    if bDoDestroyDM_ADO then
      MyDatemodul.Free;
    if bDoCoUninitialize then
      CoUninitialize;
  except
    Result := false;
  end;
end;
// ----------------------------------------------------------------------------
// procedure DLLMain(Reason: Integer); stdcall;
// ----------------------------------------------------------------------------
// Funktion...: eigene Strukturen und Objekte initialisieren
// Parameter..: [Reason] == Grund des Aufrufs
// Erreichbar.: intern
procedure DLLMain(Reason: Integer); stdcall;
begin
  case Reason of
    //-- Die DLL wurde in den Speicherbereich des akt. Prozesses geladen ------
    DLL_PROCESS_ATTACH : begin
      DisableThreadLibraryCalls(hInstance);
      DBInit;
    end;
    //-- Der aktuelle Prozeß erzeugt einen neuen Thread -----------------------
    DLL_THREAD_ATTACH : begin
    end;
    //-- Ein Thread wird beendet ----------------------------------------------
    DLL_THREAD_DETACH : begin
    end;
    //-- Die DLL wird wieder aus dem Speicherbereich des akt.Prozesses entfernt
    DLL_PROCESS_DETACH : begin
      DBUnInit;
    end;
  end;
  if Assigned(DLLProcNext) then DLLProcNext(Reason);
end;

// ============================================================================
// Initialisierungscode
// ============================================================================
begin
  DLLProcNext := Pointer(InterlockedExchange(Integer(DLLProc),Integer(@DLLMain)));
  DLLMain(DLL_PROCESS_ATTACH);
end.
in ein Beispielprojekt einzufügen. Nur leider bekomme ich beim Compilieren der DLL schon den Fehler, das dllname unbekannt sei. Was habe ich verkehrt gemacht ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat