upnp in c
-
Hallo hatte mal vor einiger zeit eine funktion in c++ geschrieben, womit ich am router mit upnp einen port freischalten konnte.
nun wollte ich das wieder machen, diesmal aber in einem c-programm.
wie es aussieht ist der code aber nicht kompatibel da ich konvertierungs fehler bekomme. Hab in der libary gesehen das es c und c++ / code gibt nur weiss ich nicht wie ich klar mache das es c ist. wenn ich im projeklt auf c++ umstelle, lässt es sich kompileiern.
-
ein #undef __cplusplus lässt zwar den c-code sichtbar werden, ändert aber nix an den kopilierungsfehlern.
-
C++ und C sind verschiedene Sprachen. Mit etwas Anpassung kann man zwar C-Programme auf einem C++-Compiler übersetzen (da C++, bis auf ein paar kleine Unterschiede, die Sprache C als Untermenge enthält), aber umgekehrt ist dies nicht möglich. Dafür muss der Code komplett auf C umgeschrieben werden. Dies ist prinzipiell immer möglich, die wahre Frage ist jedoch: Warum? Übersetz deine Funktion doch nach wie vor mit einem C++-Compiler. Wenn du eine zu C kompatible Schnittstelle erstellst, dann kannst du auch von C aus Funktionen aus in C++ geschriebenen Bibliotheken benutzen.
-
also in c++ sah es so aus
IUPnPNAT *pNAT = 0; hrStaticPortMappingCollection = pNAT->get_StaticPortMappingCollection(0,&pStaticPortMappingCollection);
da sagt er mir in dem c programm dann aber
error C2039: 'get_StaticPortMappingCollection': Ist kein Element von 'IUPnPNAT'
in der libary seh ich noch ein vtable
CONST_VTBL struct IUPnPNATVtbl *lpVtbl;
wenn ich das nutze sagt er das die paramter nicht stimmen da er als ersten para einen this zeiger will ?
-
Memberfunktionen gibt es in C eben nicht. Die Funktion muss passend umgeschrieben werden*, was sicherlich noch einen ganzen Rattenschwanz an weiteren Änderungen nach sich ziehen wird.
*: Die direkte Übersetzung einer Memberfunktion wäre eine freie Funktion, die zusätzlich einen Zeiger auf die Klasse (das ist in C++ der this-Zeiger) als Parameter hat.
-
*: Die direkte Übersetzung einer Memberfunktion wäre eine freie Funktion, die zusätzlich einen Zeiger auf die Klasse (das ist in C++ der this-Zeiger) als Parameter hat.[/quote]
hm zeiger auf eine klasse ? auf welche klasse denn ? hab in c kein eklassen
hab jetzt mal gegoogelt aber keien c alternative gefunden
-
steff' schrieb:
hab in c kein eklassen
Na eben! Das Verhalten von (C++-)Klassen musst du mit (C-)structs und freien Funktionen nachbauen. Ich habe das Wort Klasse/Struct nicht weiter differenziert, weil der Begriff in C++ sowieso austauschbar ist und ich annahm, dass dir das bekannt ist.
hab jetzt mal gegoogelt aber keien c alternative gefunden
Wonach gegoogelt? Alternativen wofür?
Und wieso willst du das ganze überhaupt in C haben, wenn du doch eine funktionierende C++-Lösung hast?
SeppJ schrieb:
Übersetz deine Funktion doch nach wie vor mit einem C++-Compiler. Wenn du eine zu C kompatible Schnittstelle erstellst, dann kannst du auch von C aus Funktionen aus in C++ geschriebenen Bibliotheken benutzen.
-
will es in einem alte c projekt hinjzufügen. hab es nun auch zusammengfeflickt danke für die tipps und denkanstösse
sollte noch wer probleme damit haben kann ich die änderungen hier posten. danke nochmal sepp