AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL

Ein Thema von danielA · begonnen am 4. Dez 2013 · letzter Beitrag vom 6. Dez 2013
Antwort Antwort
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#1

Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL

  Alt 4. Dez 2013, 11:12
Guten Morgen alle zusammen,

ich bin im Moment gerade dabei eine C-Header Datei, welche die Funktionen einer dll beschreibt in Delphi zu übernehmen.
Dabei ist mir aufgefallen, dass eine ganze Reihe von Funktionen in der Headerdatei doppelt deklariert sind.

z.B. steht da folgendes

Code:

    extern "C" DIIEXPORT BOOL WINAPI hid_GetAnalogChannel(HANDLE hDevice, UINT dwPort, ULONG *lpdwPortState);
und weiter unten noch einmal

Code:

    extern "C" DIIEXPORT BOOL WINAPI hid_GetAnalogChannel(HANDLE hUSB, UINT address, ULONG *data);
Mir ist das Konzept von überladenen Funktionen durchaus bekannt, jedoch ist dabei IMHO immer die Vorraussetzung das die Funktionen sich in Ihren Parametern unterscheiden müssen was hier, von der Benamsung der Parameter abgesehen, ja nicht der Fall ist.

Nun zu meiner Frage. Kann mir jemand erklären, wie ich obigen code zu verstehen habe bzw. wie ich dfamit umzugehen habe? Für mich stellen beide Zeilen nämlich das selbe dar.

Vielen Dank schon mal,

LG Daniel
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL

  Alt 4. Dez 2013, 11:35
Entweder ist das Schlamperei vom Hersteller oder du hast übersehen dass die Headerdatei bedingt compiliert wird.
Code:
#ifdef SYMBOL
....
extern "C" DIIEXPORT BOOL WINAPI hid_GetAnalogChannel(HANDLE hDevice, UINT dwPort, ULONG *lpdwPortState);
#else
....
extern "C" DIIEXPORT BOOL WINAPI hid_GetAnalogChannel(HANDLE hUSB, UINT address, ULONG *data);
#endif
fork me on Github
  Mit Zitat antworten Zitat
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#3

AW: Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL

  Alt 4. Dez 2013, 11:59
Hallo sx2008,

Danke für Deine schnelle Antwort.
ja Schlamperei war/ist auch mein Gedanke. War mir aber nicht sicher, weil es eben mehrfach vorkommt und ich in C nicht zu 100% zu Hause bin.

Die Header-Datei besteht bis auf ein #define am Anfang lediglich aus Funktionsdefinitionen. #ifdef's kommen überhaupt nicht vor. Ich denke ich werde doppelte Funktionen erst einmal weglassen und schauen was die IO-Karte nach meiner Implementierung noch nicht kann aber können sollte. Aber ich denke das ist tatsächlich nur schludrigkeit beim Hersteller.

LG Daniel
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL

  Alt 4. Dez 2013, 16:41
Im Prinzip gibt es bei solchen APIs keine Überladung, da beim Import lediglich auf den Namen geachtet wird.

Es kommt zwar vor, daß auch die Typen der Parameter in den Exportnamen aufgenommen werden (mir war so, als wenn einige C++-Compiler das gerne machen),
so ala "hid_GetAnalogChannel#HANDLE#UINT#PULONG", aber da die Typen hier gleich sind, wäre das auch keine Erklärung.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

AW: Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL

  Alt 4. Dez 2013, 16:55
Kannst Du Dir mal mit einem PE-Anzeiger (z.B. GExperts) die fertige DLL ansehen, welche Funktionen exportiert werden, und wie die dort heißen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#6

AW: Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL

  Alt 5. Dez 2013, 12:08
Ups, da gabs ja noch mehr Antworten

Ich habe mir gestern Abend noch den ExportViewer von nirsoft runtergeladen und die DLL mal ausgelesen. Wußte gar nicht, das GExperts das auch kann. Nutze es ja auch erst seit ca. 15 Jahren (*duck*). Worunter findet man das da?

Dabei konnte ich auf jeden Fall feststellen, das man das Headerfile tatsächlich total vergessen kann. Die doppelt im Headerfile angegebenen Funktionen gibts dort auch nur einmal, andere im Headerfile angegebenen Funktionen gibts gar nicht. Was aber auch nicht schlimm zu sein scheint, da diese Funktionen noch einmal unter einem etwas anderen Namen existieren.

Was ich aber richtig lustig finde ist, das der Übergabestring in der 32bit DLL anders als in der 64 Bit DLL ist. Toll aber na ja. Durchlebe gerade eine Metamorphose ...
Morgen bin ich Tipse.

In diesem Sinne ...
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

AW: Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL

  Alt 6. Dez 2013, 13:16
Ich habe mir gestern Abend noch den ExportViewer von nirsoft runtergeladen und die DLL mal ausgelesen. Wußte gar nicht, das GExperts das auch kann. Nutze es ja auch erst seit ca. 15 Jahren (*duck*). Worunter findet man das da?
Bei mir gibt es da den Punkt "PE-Informationen"
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#8

AW: Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL

  Alt 6. Dez 2013, 14:06
Öööööhhhhm bei mir auch *grins*

Ja bei GExperts gibt es doch immer wieder Features die man noch nicht gefunden hat.

Vielen Dank, ich währe da glaube ich nie drauf gekommen das GExperts das selbst auch kann.
  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 21:13 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