AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Definition DLLProc-Variable in Delphi7
Thema durchsuchen
Ansicht
Themen-Optionen

Definition DLLProc-Variable in Delphi7

Ein Thema von bubuu · begonnen am 1. Jun 2010 · letzter Beitrag vom 2. Apr 2013
Antwort Antwort
bubuu

Registriert seit: 1. Jun 2010
Ort: Stäfa
6 Beiträge
 
Delphi 7 Professional
 
#1

Definition DLLProc-Variable in Delphi7

  Alt 1. Jun 2010, 16:34
Hallo,
Ich habe zig Foren etc. durchpflügt und meinte begriffen zu haben, wie man ein DLL mit Hilfe einer call-back Funktion initialisieren kann. Mein Dll - etwas abgekürzt - sieht so aus:
Delphi-Quellcode:
library Rpc_2;


uses
  System, SysUtils, Classes, Windows,
  AT91def in 'AT91def.pas',
  RPC in 'RPC.pas',
  Link in 'Link.pas{CIF};

{$R *.res}
var
  DLLProcNext: procedure(Reason: Integer); stdcall = nil;
  DLLProc: TDLLProc;

// exported functions ==========================================================

  function WhoAmI(var v: Cardinal; var s: PChar): EStatus; stdcall; export;
  var str: string;
  begin
    Result := Remote.WhoAmI(v, str);
    s := PChar(str);
  end;

  function SetROMP(irom: TIROM): EStatus; stdcall; export;
  begin
    Result := Remote.SetROMP(irom);
  end;

  function GetROMP( var irom: TIROM; var romstatus: Cardinal ): EStatus; stdcall; export;
  begin
    Result := Remote.GetROMP(irom, romstatus);
  end;


exports
  WhoAmI, SetROMP, GetROMP;

// initialisation routine called by system =====================================

  procedure IniRpc(Reason: Integer); stdcall;
  begin
    case Reason of
      DLL_PROCESS_ATTACH:
        DisableThreadLibraryCalls(hInstance);
      DLL_THREAD_ATTACH:
      ;
      DLL_THREAD_DETACH:
      ;
      DLL_PROCESS_DETACH:
      ;
    end;
    if Assigned(DLLProcNext) then DLLProcNext(Reason);
  end;

begin
    DLLProcNext := Pointer(InterlockedExchange(Integer(DLLProc), Integer(@IniRpc)));
    IniRpc(DLL_PROCESS_ATTACH);
end.
Wenn ich das compiliere, so kriege ich Fehler wegen des Typs TDLLProc. Ersetze ich diesen Typ durch Pointer, so kommt der Fehler, weil die Systemvariable DLLProc Delphi 7 nicht bekannt ist.
Frage 1: Wo sind TDLLProc und DLLProc definiert und wie komm ich da ran?

Die Variable CIF, definiert in der Unit Link.pas müsste initialisiert werden. Das würde man wohl nach dem Aufruf von disableThreadLibraryCalls-Aufruf in IniRpc machen - aber
Frage 2:Wie das? Bei einer Application sieht das ja so aus:
  Application.CreateForm(TCIF, CIF); und in einer DLL?
Mit Dank und Gruss bubuu
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Definition DLLProc-Variable in Delphi7

  Alt 1. Jun 2010, 16:49
DLLProc ist eine globale Variable in der Unit System (die immer eingebunden ist). Die brauchst/darfst du nicht extra deklarieren
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#3

Re: Definition DLLProc-Variable in Delphi7

  Alt 1. Jun 2010, 16:51
zu 2.: CIF := TCIF.Create(nil);

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
bubuu

Registriert seit: 1. Jun 2010
Ort: Stäfa
6 Beiträge
 
Delphi 7 Professional
 
#4

Re: Definition DLLProc-Variable in Delphi7

  Alt 1. Jun 2010, 18:19
Zu 1.
Zitat:
DLLProc ist eine globale Variable in der Unit System (die immer eingebunden ist). Die brauchst/darfst du nicht extra deklarieren
Ja, so habe ich das auch verstanden. Doch Delphi stolpert über die erste Erwähnung von DLLProc - ob man nun System in der uses-Liste drin hat oder nicht
Delphi-Quellcode:
begin
    DLLProcNext := Pointer(InterlockedExchange(Integer(DLLProc), Integer(@IniRpc)));
mit der Meldung:
Zitat:
[Fehler] Rpc_2.dpr(143): Nicht genügend wirkliche Parameter
Der Cursor steht dabei hinter Integer(DLLProc). Und da bin ich echt ratlos

Zu 2. Für den Tip
Zitat:
CIF := TCIF.Create(nil);
mal besten Dank. Ich werd das ausprobieren wenn obiges Problem gelöst ist.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

Re: Definition DLLProc-Variable in Delphi7

  Alt 1. Jun 2010, 19:15
Integer(@DLLProc)

Sonst würde es ja heißen du willst DLLProc aufrufen und dessen Result nach Integer casten.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
bubuu

Registriert seit: 1. Jun 2010
Ort: Stäfa
6 Beiträge
 
Delphi 7 Professional
 
#6

Re: Definition DLLProc-Variable in Delphi7

  Alt 2. Jun 2010, 11:39
Mein Kommentar zu himitsu, bzw. dem fehlenden @: Du hast natürlich völlig recht. Ich könnte mir die Haare raufen - soweit noch vorhanden , dass ich das nicht selbst gemerkt habe. Danke für den Tip.

Nun compiliert meine dll. Und damit geht's jetzt an den Gebrauch dieser Ware. Allen Ratgebern herzlichen Dank.
bubuu
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Definition DLLProc-Variable in Delphi7

  Alt 1. Apr 2013, 11:42
Ich wärm das hier mal auf, weil gleiches Problem - gehabt.
Aber ein weiteres (auch lösbares) kommt hinzu:

procedure IniRpc(Reason: Integer); stdcall; <- wenn ich hier mit dem stdcall kompiliere, geht das laden der DLL im Programm völlig in die Uhr mit zig Fehlermeldungen.

Lasse ich das stdcall weg, ist alles gut.

Kann das jemand erklären ?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Definition DLLProc-Variable in Delphi7

  Alt 2. Apr 2013, 10:03
Moin,

wenn die Deklaration der Aufrufkonvention in der DLL und im Programm nicht übereinstimmen kommt es zu Fehlern.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  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 07:05 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