Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Win32 Dll erzeugen (https://www.delphipraxis.net/116890-win32-dll-erzeugen.html)

lazcad 8. Jul 2008 11:37


Win32 Dll erzeugen
 
Hallo,

ich habe lange nichts mit Delphi gemacht und jetzt möchte ich eine Win23 Dll mit Delphi erzeugen.

Dabei habe ich 2 interne Funktionen und eine externe. Rufe ich die interne Funktion auf, bekomme ich "nicht deklarierter Bezeichner". Warum ?

Delphi-Quellcode:
library Project1;

uses
  SysUtils,
  Classes;

{$R *.res}

function Calc (x,y :Byte): word; stdcall;
begin
  Result:= Addieren (x,y); // <--- nicht deklarierter bezeichner Addieren ???
end;

function Addieren(x, y: Byte): Word; // stdcall;
begin
  Result := x + y;
end;

function Subtrahieren(x, y: Byte): ShortInt; //stdcall;
begin
  Result := x - y;
end;

// exports Addieren; // index 1;
// exports Subtrahieren; // index 2;
exports Calc;

begin
end.
Kann mir jemand einen Tip geben, wie das Problem zu lösen ist ?

Danke !

Gruß
Stefan

Assertor 8. Jul 2008 11:42

Re: Win32 Dll erzeugen
 
In dem Du Addieren vor Calc verschiebst.

Gruß Assertor

Die Muhkuh 8. Jul 2008 11:43

Re: Win32 Dll erzeugen
 
Hi Stefan,

füge vor dem Calc mal das hier ein:

Delphi-Quellcode:
function Addieren(x, y: Byte): Word; forward;

Luckie 8. Jul 2008 11:51

Re: Win32 Dll erzeugen
 
Da du keine Klasse mit einer Deklaration hast, in der die Methoden bekannt gemacht werden - auch für den Compiler, sondern eine einfache Sammlung von Routinen in einer Unit, geht der Compiler von oben nach unter vor. Und wenn er in der Funktion calc auf den Funktionasaufruf Addiere stößt, weiß er damit nichts anzufagen, weil die Funktion Addiere erst weiter unten im Quelltext implementiert wird.

Du hast jetzt zwei Möglichkleiten, die beide schon erwähnt wurden. Entweder du sortierst die Funktionen in deinem Quellcode um, was hier noch möglich ist, oder aber, wenn das nicht möglich ist, kannst du dem Compiler die Routinen auch mit sogenannten Delphi-Referenz durchsuchenfoward-Deklarationen bekannt machen:
Delphi-Quellcode:
function Addieren(x, y: Byte): Word; forward;
Das reicht schon, weil der Compiler nur wissen muss, wie der Funktionskopf aussieht, um entscheiden zu können, ob die Funktion korrekt aufgerufen wird.

Das noch mal zum Verständnis zu den Lösungen meiner Vorposter.

Die Muhkuh 8. Jul 2008 11:53

Re: Win32 Dll erzeugen
 
Hab es jetzt nicht ausprobiert, aber wäre es nicht möglich eine Klasse mit Klassenmethoden zu erstellen und diese zu exportieren?

Luckie 8. Jul 2008 11:58

Re: Win32 Dll erzeugen
 
bei Klassen in einer DLL bin ich immer vorsichtig. Außerdem halte ich die Lösung mit Klassenmethoden für etwas übertrieben. Und was mir noch einfällt, mit Klassenmethoden können eventuell andere Programmiersprachen nichts anfangen. Ach und wie willst du die exportieren? Das wären jedenfalls noch Punkte, die geklärt werden müssten und die eventuell Probleme bereiten könnten.

Apollonius 8. Jul 2008 12:07

Re: Win32 Dll erzeugen
 
Wenn die Klassenmethoden mit der Direktive "static" deklariert werden, wird kein Self-Parameter entgegengenommen, also können sie aus anderen Sprachen benutzt werden. Allerdings weiß ich nicht, ob Delphi den Export erlaubt.

Luckie 8. Jul 2008 12:08

Re: Win32 Dll erzeugen
 
Die Direktive static gibt es aber auch erst in den neueren Delphi Versionen oder?

Apollonius 8. Jul 2008 12:16

Re: Win32 Dll erzeugen
 
Wenn ich die Dokumentation richtig verstanden habe, gibt es sie erst ab BDS 2006 in Win32.

Reinhardtinho 8. Jul 2008 12:17

Re: Win32 Dll erzeugen
 
So eine DLL könnte man nicht in C einbinden, sehe ich das richtig?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 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