AGB  ·  Datenschutz  ·  Impressum  







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

Win32 Dll erzeugen

Ein Thema von lazcad · begonnen am 8. Jul 2008 · letzter Beitrag vom 9. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
lazcad

Registriert seit: 6. Sep 2006
2 Beiträge
 
#1

Win32 Dll erzeugen

  Alt 8. Jul 2008, 12:37
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
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#2

Re: Win32 Dll erzeugen

  Alt 8. Jul 2008, 12:42
In dem Du Addieren vor Calc verschiebst.

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Win32 Dll erzeugen

  Alt 8. Jul 2008, 12:43
Hi Stefan,

füge vor dem Calc mal das hier ein:

function Addieren(x, y: Byte): Word; forward;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Win32 Dll erzeugen

  Alt 8. Jul 2008, 12:51
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:
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Win32 Dll erzeugen

  Alt 8. Jul 2008, 12:53
Hab es jetzt nicht ausprobiert, aber wäre es nicht möglich eine Klasse mit Klassenmethoden zu erstellen und diese zu exportieren?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Win32 Dll erzeugen

  Alt 8. Jul 2008, 12:58
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Win32 Dll erzeugen

  Alt 8. Jul 2008, 13:07
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Win32 Dll erzeugen

  Alt 8. Jul 2008, 13:08
Die Direktive static gibt es aber auch erst in den neueren Delphi Versionen oder?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Win32 Dll erzeugen

  Alt 8. Jul 2008, 13:16
Wenn ich die Dokumentation richtig verstanden habe, gibt es sie erst ab BDS 2006 in Win32.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#10

Re: Win32 Dll erzeugen

  Alt 8. Jul 2008, 13:17
So eine DLL könnte man nicht in C einbinden, sehe ich das richtig?
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:32 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