![]() |
Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL
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:
und weiter unten noch einmalextern "C" DIIEXPORT BOOL WINAPI hid_GetAnalogChannel(HANDLE hDevice, UINT dwPort, ULONG *lpdwPortState);
Code:
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. extern "C" DIIEXPORT BOOL WINAPI hid_GetAnalogChannel(HANDLE hUSB, UINT address, ULONG *data); 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 |
AW: Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL
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 |
AW: Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL
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 |
AW: Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL
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. |
AW: Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL
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.
|
AW: Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL
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 ... |
AW: Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL
Zitat:
|
AW: Doppelte Funktionen in in Delphi zu überführender Headerdatei für DLL
Ööööö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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz