Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Parameter an Basis-Klasse

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
11.12.2007, 22:23 Uhr
FunnyDingo



Zum Namespace: die Idee ist gar nicht schlecht. NPM steht für "Network Processing Module" (mir ist bis Dato kein besserer Name eingefallen). Die Hauptanwendung soll halt mehrer Protokolle untersützen. Jedes Protokoll wird in ein NPM gepackt. Die NPMs werden als SO kompiliert und können so dynamisch nachgeladen werden.

Nun zu der extern-C-Deklaration: die getInstance ist in dieser Deklaration, damit dlsym() das Symbol finden kann. Soweit ich weiß, werden bei C++ die Symbolnamen anders gespeichert, so dass die Funktionen, die via dlsym() aufgelöst werden sollen, als C-Symbol gespeichert werden müssen.

Falls das doch anders sein sollte, wäre ich um Aufklärung erfreut.
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
11.12.2007, 22:40 Uhr
0xdeadbeef
Gott
(Operator)


Das ist zwar richtig, aber wenn du einen C++-Typ zurückgibst, kann das Symbol ja schlecht in C-Form exportiert werden. In diesem Fall wird das extern "C" praktisch ignoriert (es gibt ein paar Feinheiten im Standard in Bezug auf Funktionszeiger, die sich aber in der Realität nicht auswirken).

Was du allerdings machen kannst, ist, einen void* zurückzugeben und ggf. halt umzucasten, also

C++:
extern "C" void *get_http_instance(void*);


und dann in der Anwendung

C++:
npm::http (*get_http_instance)(npm::logger *);

*(void **)(&get_http_instance) = dlsym(dll_handle, "get_http_instance");


Wenn man ganz spitzfindig ist, ist das zwar eeeeeigentlich nicht ganz zulässig, denn der Funktionszeiger müsste auch auf extern "C" getrimmt sein, in der Praxis sollte das aber bei allen Compilern funktionieren, denn aus Gründen der Einfachheit und Rückwärtskompatibilität werden C- und C++-Funktionen gleich aufgerufen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: