AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL entry function

Ein Thema von HERMES · begonnen am 10. Jun 2005 · letzter Beitrag vom 11. Jun 2005
Antwort Antwort
HERMES

Registriert seit: 29. Nov 2004
142 Beiträge
 
#1

DLL entry function

  Alt 10. Jun 2005, 16:21
Hallo,

ich muss eine DLL schreiben, welche eine DLL entryfunction zur verfügung stellt. Das Problem ist nun, dass es so aussieht, als ob Delphi nur entryfunctionen mit der folgenden Signatur unterstützt:
function DllMain( dwReason :DWORD ):Boolean; Die Dll muss aber eine entryfunction des Types :
function DllMain( hModule :HINST; dwReason :DWORD; lpRes :LPVOID ):Boolean; zur Verfügung stellen.

Kennt jemand eine Möglichkeit dies zu realisieren??

danke im voraus
SImon
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: DLL entry function

  Alt 10. Jun 2005, 17:03
was hindert dich daran einfach die funktion mit den parametern zu exporitieren?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#3

Re: DLL entry function

  Alt 10. Jun 2005, 17:14
function DllMain( hModule :HINST; dwReason :DWORD; lpRes :LPVOID ):Boolean; [b]stdcall;[/b] das geht - so viel ich weiß nicht - ABER du könntest ganz einfach eine funktion mit dem aufbau machen und den entrypoint abändern (z.b. mit lordPE von yoda) um an die adresse zu kommen von der funktion kannste diese dann einfach exportieren und schon zeigt dir lordPE die funktion an und du änderst den entrypoint

falls es ne andere möglichekit gibt - ich würd mich sehr freun wenn jemand diese postet, da mich das auch ab und zu ärgert
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#4

Re: DLL entry function

  Alt 10. Jun 2005, 17:37
Zitat von HERMES:
Kennt jemand eine Möglichkeit dies zu realisieren?
Kurz: Nein, nicht ohne mehr Informationen.

Die eigentliche DllMain (in dem von dir gewünschten Format) befindet sich in der RTL von Delphi und kann nicht ohne weiteres überschrieben werden.
Wenn Du mehr Informationen zm Warum/Wieso/Weshalb geben kannst, dann gibt es vielleicht andere Wege dies zu lösen...

ps@brechi: keine gute Idee, da dann initialization/finalization-Abschnitte (und vieles andere mehr) nicht mehr funktionieren

edit: vielleicht ist das das gesuchte:
Delphi-Quellcode:
library Project1;

uses
  Windows;

{$R *.res}
  
////////////////////////////////////////////////////////////////////////////////
// DllMain

function DllMain(Inst: HINST; Reason: ULONG; Reserved: Pointer): BOOL; stdcall;
begin
  case Reason of
    DLL_PROCESS_ATTACH:
      DisableThreadLibraryCalls(Inst);
  end;
  Result := True;
end;

////////////////////////////////////////////////////////////////////////////////
// LibraryProc

{$IFNDEF CONDITIONALDEFINE} // Delphi 2-5
type
  TDLLProc = procedure(Reason: Integer);
{$ENDIF}

var
  DllProcNext: TDLLProc; // = nil

procedure LibraryProc(Reason: Integer);
begin
  ExitCode := Integer(DllMain(HInstance, Reason, nil));
  if Assigned(DllProcNext) then
    DllProcNext(Reason);
end;

////////////////////////////////////////////////////////////////////////////////
// RTL Entry Point

begin
  DllProcNext := TDLLProc(DllProc);
  TDLLProc(DllProc) := LibraryProc;
  LibraryProc(DLL_PROCESS_ATTACH);
end.
  Mit Zitat antworten Zitat
HERMES

Registriert seit: 29. Nov 2004
142 Beiträge
 
#5

Re: DLL entry function

  Alt 10. Jun 2005, 22:29
@nico:
ganz so wie du das in deinem beispiel code hast kann das nicht gehen, aber es wäre eine möglichkeit, werde das mal ausprobieren, wobei ich da nicht sehr zuversichtlich bin.

Das mit dem LordPE werde ich auch mal testen, warum nicht wenns funzt. Es ist egal, wenn der initialisazion block nicht funzt.

Zur Info, das ist eine Dll die einen Printermonitor im spooler installieren soll und diese Dlls benötigen eine entryfkt mit den 3 parametern. Ich denke, das es irgendwie möglich sein sollte eine andere art von entryfkt zu verwenden, da man mit delphi auch systemsteuerungsprogramme schreiben kann und das sind auch nur dlls, die auch eine besondere entry fkt haben.

danke
SIm
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#6

Re: DLL entry function

  Alt 10. Jun 2005, 23:00
man kann ja als 1. wenn man den entrypoint abgeändert hat die originale funktion aufrufen
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#7

Re: DLL entry function

  Alt 11. Jun 2005, 12:31
Zitat von HERMES:
Es ist egal, wenn der initialisazion block nicht funzt.
Dir vielleicht. Dem Programm (i.e. der DLL) vermutlich nicht. Dazu solltest du dir vor Augen führen, daß auch solche Units, die du "nicht siehst", nämlich System und Sysinit, unter Umständen initialization und finalization enthalten. Um die kommst du also nicht herum, selbst wenn du in deinen eigenen Units keine solchen Abschnitte benutzt!

@HERMES: Wenn es um diesen PrinterMonitor geht, dann sollte es egal sein. Die echte Entryfunktion hat immer diesen Prototypen, weil es sich um eine Konvention von Windows handelt. Wie bei main() (in C) ist auch das was du in Delphi als "DllMain" siehst nur eine Funktion, welche von der drunterliegenden RTL (wenn du den Source hast, kannst du ja mal reinschauen) - mit einem der Konvention folgenden Prototypen - aufgerufen wird.

Fazit: Nach außen ist die DLL mit einem Entrypoint ausgestattet, welcher die gleichen Merkmale aufweist wie jede andere DLL. Punkt! Das Modulhandle bekommst du, wie in Delphi üblich.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#8

Re: DLL entry function

  Alt 11. Jun 2005, 15:02
Zitat von HERMES:
ganz so wie du das in deinem beispiel code hast kann das nicht gehen
Hm, warum?
(bei den meisten CRTs ist die DllMain auch nicht der Einstiegspunkt - es ist in der Delphi-RTL nur anders gelöst worden)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz