Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C Funktionen "überladen" (https://www.delphipraxis.net/121259-c-funktionen-ueberladen.html)

Elko 24. Sep 2008 17:42


C Funktionen "überladen"
 
Hallöchen!
Ich hab bei mir eine Funktion in meinem C-Programm, die ich im Prinzip "überladen" will. Ich weiß, das geht in C nicht, aber vielleicht hat ja trotzdem jemand ne Idee, wie man das zumindest "simulieren" (ich weiß, das hört sich bescheuert an...;-))kann.
Also: ich habe eine Funktion, der ich ein mal die eine Struktur übergeben will und das andere Mal eine andere Struktur übergeben will. Im Prinzip macht sie bei beiden Strukturen das gleiche, aber sie muss halt die verschiedenen Strukturen erst einmal für sich "umformulieren". Ich will eigentlich keinesfalls 2 Funktionen mit verschiedenen Namen nutzen :zwinker:
Hat jemand dazu eine Idee?

Gruß,
Elko

jfheins 24. Sep 2008 17:56

Re: C Funktionen "überladen"
 
Okay...

Definiere deine Structs so, dass am Anfang die Größe (oder ein anderes, eindeutiges Merkmal) steht.

Jetzt kannst du deiner Funktion einen Pointer übergeben, und die kann diesen auf int (oder eben der Typ des Felds) casten, und anhand dieser heruafinden, welcher der beiden Struct-Typen es ist ;)

(IIRC machen das auch manche Win-API Funktionen so, dass man im übergebenen Struct als erstes Element die Größe drinhat ... :gruebel: )

Klaus01 24. Sep 2008 18:00

Re: C Funktionen "überladen"
 
.. oder so wie es hier beschrieben ist.
Ist kein wirklicher Overload aber schau selbst mal.
Oder gleich C++ verwenden.


Grüße
Klaus

Elko 1. Okt 2008 17:52

Re: C Funktionen "überladen"
 
Vielen Dank für eure Tipps!
Ich habs jetzt folgendermaßen umgesetzt: Die beiden Strukturen beinhalten als erste Variable ein Byte, das die Größe der Struktur beinhaltet. Dann wird bei einem Aufruf der Funktion die Strukturadresse übergeben und die Funktion nimmt die Adresse als void-Zeiger auf. Dann wandelt sie den void->Zeider in einen Char-Zeiger um, liest das Byte (was ja die Länge der Struktur beinhaltet) und weiß dann Bescheid, welchen Typ ich übergebe :thumb: :feuerchen:

Gruß,
Elko


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