Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [DLL] Procedure Deklarieren (https://www.delphipraxis.net/74575-%5Bdll%5D-procedure-deklarieren.html)

gsh 5. Aug 2006 13:31


[DLL] Procedure Deklarieren
 
Hi DPler

Bin ich echt zu blöd um in einer DLL eine procedure zu deklarieren?
Also ich hab zwei proceduren in meiner DLL eine davon wird export und die andere nicht.

Ich muss eine davon deklarieren da sonst immer eine davon nicht gefunden wird, denn die eine ruft die andere auf und umgekert. Also wenn ich jetzt eine davon unter die andere schreib dann wird klarerweiße die andere nicht mehr gefunden. Naja kompliziert aber logisch :mrgreen:

Hier mal mein Source:
Delphi-Quellcode:
library TestPlugin;

uses [..]

{$R *.res}

var
  PluginSend : procedure(Befehl : integer; Parameter : Pointer);

procedure PluginMain(Befehl : integer; Parameter : Pointer); stdcall;
begin
  case Befehl of
    BefehlToPlugin_PluginInit://PluginInit
    begin
      PluginSend := TPluginRecordToPlugin_PluginInit(Parameter^).PluginSend;
      ObserverAnmeldung;    //<-- Wird nicht gefunden weil es unten steht
    end;
  end;
end;

procedure ObserverAnmeldung;
var
  TempPluginRecordToApp_PluginMain : TPluginRecordToApp_PluginMain;
begin
  TempPluginRecordToApp_PluginMain.PluginMain := PluginMain; //<-- Hier wird die PluginMain zwar gefunden aber nur weil diese procedure unten steht
  PluginSend(BefehlToPlugin_PluginFree*-1, @TempPluginRecordToApp_PluginMain);
end;

exports PluginMain;

begin
end.
Ich hoff ihr versteht mich

mkinzler 5. Aug 2006 13:37

Re: [DLL] Procedure Deklarieren
 
Delphi-Quellcode:
exports PluginMain;
Du exportierst ja auch nur eine. Üch würde dem export auch einen namen geben, wenn die cassensitive Procedure auch von anderen Sprachen genutzt werden soll.

Khabarakh 5. Aug 2006 13:42

Re: [DLL] Procedure Deklarieren
 
@mkinzler: Lies dir den ersten Post nochmal durch.

@gsh: Dazu gibt es den interface-Abschnitt ;) . interface-Abschnitte gibt es jedoch wiederum nur in seperaten Units. Deine library-Datei besteht dann also nur noch aus uses und exports.

gsh 5. Aug 2006 13:45

Re: [DLL] Procedure Deklarieren
 
Ja des ist mir klar des ich nur eine exportiere
Die andere will ich ja nicht exporiteren

Die procedure ObserverAnmeldung; soll nur in der DLL aufrufbar sein und dient der Übersicht.

//Nachtrag (dank roter box):
@Khabarakh: Meine DLL hat keinen interface abschnitt. und wenn ich interface hinschreib dann mag er des nicht. Des hät ich nämlich schon probiert

mkinzler 5. Aug 2006 13:47

Re: [DLL] Procedure Deklarieren
 
Zitat:

@mkinzler: Lies dir den ersten Post nochmal durch.
Hätte ich die frage genauer gelesen hätte ich das eigentlich Problem gesehen :oops:
[edit: Warum verwendest du kein forward?]

Khabarakh 5. Aug 2006 13:52

Re: [DLL] Procedure Deklarieren
 
@gsh: Editiert.

@mkinzler: Auch eine Möglichkeit. Wenn die Dll umfangreicher wird, würde ich trotzdem mit dem Auslagern anfangen.

gsh 5. Aug 2006 13:53

Re: [DLL] Procedure Deklarieren
 
Zitat:

Zitat von mkinzler
[edit: Warum verwendest du kein forward?]

Ein Forward? was ist das?

edit:
Zitat:

Zitat von Khabarakh
@gsh: Editiert.

@mkinzler: Auch eine Möglichkeit. Wenn die Dll umfangreicher wird, würde ich trotzdem mit dem Auslagern anfangen.

Ja habs gesehen gesehen aber ich möchte diese Procedure nicht in eine Unit auslagern da sie imho dafür zu klein ist.

Chewie 5. Aug 2006 13:54

Re: [DLL] Procedure Deklarieren
 
Notier ObserverAnmeldung einfach vor PluginMain.

gsh 5. Aug 2006 13:56

Re: [DLL] Procedure Deklarieren
 
Zitat:

Zitat von Chewie
Notier ObserverAnmeldung einfach vor PluginMain.

Ja dann findert er aber in der Procedure ObserverAnmeldung die Procedure PluginMain nicht mehr :wall:

mkinzler 5. Aug 2006 13:56

Re: [DLL] Procedure Deklarieren
 
Delphi-Quellcode:
procedure ObserverAnmeldung; forward;

procedure PluginMain(Befehl : integer; Parameter : Pointer); stdcall;
begin
   ...
end;

procedure ObserverAnmeldung;
var
  TempPluginRecordToApp_PluginMain : TPluginRecordToApp_PluginMain;
begin
...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 Uhr.
Seite 1 von 2  1 2      

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