000
30.05.2007, 12:28 Uhr
FunnyDingo
|
Hallo zusammen,
ja, ich schon wieder *g* .oO(langsam bekomme ich echt ein schlechtes gewissen, so viel zu Fragen). Also ich versuche gerade, eine abgelietete Klasse aus einem so zu laden. Mein Hautpprogramm kennt die Klasse class_npmbase. In dem so ist eine Abgeleitete Klasse class_npmhttp. Ich dachte mir nun: jau, einfach mit dlopen() laden und lässt die eine Referenz auf eine Instanz zurück geben. leichter gesagt als getan. Der Code zum laden sieht so aus (die Variablen sollen später noch durch structs ersetzte werden, dies war nur erstmal zum testen):
C++: |
void *handle = dlopen("npm/http.so", RTLD_NOW); if (handle == NULL) { std::cout << "DlError: " << dlerror() << std::endl; return false; } void *symbol = dlsym(handle, "npmGetInstance"); if (symbol == NULL) { std::cout << "DlError: " << dlerror() << std::endl; return false; } class_npmbase *npmHttp = NULL; void (*npmGetInstance)(class_npmbase*) = (void (*)(class_npmbase*))symbol; npmGetInstance(npmHttp); std::cout << "npmHttp: " << npmHttp << std::endl; npmHttp->listen(); std::cout << "npmHttp: " << npmHttp << std::endl;
|
Und die npmGetInstance so:
C++: |
extern "C" { void npmGetInstance(class_npmhttp *ptr) { std::cout << "npmGetInstance(" << ptr << ")" << std::endl; ptr = &class_npmhttp::instance(); std::cout << "Ptr: " << ptr << ", Addr: " << &class_npmhttp::instance() << std::endl; } }
|
Das ist die Ausgabe:
Code: |
npmGetInstance(0) class_npmbase Konstuktor npmhttp Konstruktor Ptr: 0xb7f9b028, Addr: 0xb7f9b028 npmHttp: 0 LOADING BASE NPM npmHttp: 0
|
Ich habe es schon auf mehrer Arten probiert: class_npmhttp &npmGetInstance() class_npmhttp *npmgetInstance() und halt die oben zu sehende Variante
Wenn ich aber npmHttp->listen() aufrufe, wird nicht die listen-Methode der class_npmhttp, sondern die der class_npmbase aufgerufen. Was ich auch nicht verstehe: wenn npmHttp 0 ist, dann müsste es doch nen Speicherzugriffsfehler geben, oder nicht!?
Gruß, Funny -- "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)
Meine Website: http://www.funnydingo.de Dieser Post wurde am 30.05.2007 um 12:30 Uhr von FunnyDingo editiert. |