AGB  ·  Datenschutz  ·  Impressum  







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

DLLProc richtig "erweitern"

Ein Thema von scp · begonnen am 27. Jul 2004 · letzter Beitrag vom 27. Jul 2004
Antwort Antwort
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#1

DLLProc richtig "erweitern"

  Alt 27. Jul 2004, 13:37
Delphi-Quellcode:
type
  TDllProc = procedure(Reason: Integer); {stdcall; ???}

var
  DLLProcNext: TDllProc = nil;
  
procedure DLLMain(Reason: Integer); {stdcall; ???}
begin
  case Reason of
    DLL_PROCESS_ATTACH:
      begin
        DisableThreadLibraryCalls(hInstance);
      end;
    DLL_THREAD_ATTACH:
      ;
    DLL_THREAD_DETACH:
      ;
    DLL_PROCESS_DETACH:
      ;
   end;
   if Assigned(DLLProcNext) then DLLProcNext(Reason);
end;

begin
  DLLProcNext := Pointer(InterlockedExchange(Integer(@DLLProc), Integer(@DLLMain)));
  DLLMain(DLL_PROCESS_ATTACH);
end.
Welche Variante ist nun die richtige?

Ich habe verschiedene Varianten von Nico und Assarbad gesehen. Bei der einen wird stdcall verwendet, bei der anderen nicht. Assarbad verwendet InterlockedExchange, hat aber bei dem Integer(@DLLProc) kein @ stehen, was sich bei D7 Personal nicht kompilieren lässt.
Nico hat bei spotlite.de wiederum kein InterlockedExchange verwendet, sondern
TDllProc(DLLProc) := DLLMain; PS: In D7 ist TDllProc bereits ohne stdcall deklariert.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#2

Re: DLLProc richtig "erweitern"

  Alt 27. Jul 2004, 15:42
Eine Vorlage könnte etwa so aussehen:
Delphi-Quellcode:
library foo;

uses
  Windows;

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

var
  DllProcNext: TDLLProc; // nil

procedure LibraryProc(Reason: Integer);
begin
  case Reason of
    DLL_PROCESS_ATTACH:
      DisableThreadLibraryCalls(HInstance);
  end;
  if Assigned(DllProcNext) then
    DllProcNext(Reason);
end;

begin
  DllProcNext := TDLLProc(DllProc);
  TDLLProc(DllProc) := LibraryProc;
  LibraryProc(DLL_PROCESS_ATTACH);
end.
Hat den Vorteil, dass es bei Delphi 7 keine unnötigen Warnungen gibt und es auch mit Delphi 2,3,4,5 und 6 funktioniert.
(edit: Gross-/Kleinschreibung gefixt )
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#3

Re: DLLProc richtig "erweitern"

  Alt 27. Jul 2004, 16:39
Danke, wusste doch das da was fehlte:
DllProcNext := TDLLProc(DllProc); War bei dem post im spotlight nicht dabei, oder ich hatte es übersehen.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#4

Re: DLLProc richtig "erweitern"

  Alt 27. Jul 2004, 17:47
Mein Fehler. Diese (offensichtliche) Zeile fehlt in dem Beitrag bei Spotlight
  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 06:24 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