anoniem Geplaatst: 1 september 2002 Delen Geplaatst: 1 september 2002 Hoi, Ik ben bezig met het volgende: Een MDI-programma is Qt/C++. Nu wil ik in die MDI-interface modules hebben, gewoon gecompileerde Qt-programma's maar dan van die .so bestanden. Ik gewoon die vensters kunnen laden uit die .so bestanden, maar zonder dat het hoofd programma ooit opnieuw gecompileerd hoeft te worden. De interface van Qt is niet zo'n probleem, maar het gaat me erom; hoe laad ik .so bestanden??? Weet iemand of dit mogelijk is?? Bedankt, Barry Faas Quote Link naar reactie
anoniem Geplaatst: 1 september 2002 Auteur Delen Geplaatst: 1 september 2002 man 3 dlopen Als je C++ functies probeert te laden heb je een probleem... De C++ ABI werkt heel anders dan de C ABI. En dan heb je ook nog verschillende compilers en versies van g++ die een verschillende implementatie van die ABI hebben en dus verschillende symbolnamen produceren... Quote Link naar reactie
anoniem Geplaatst: 2 september 2002 Auteur Delen Geplaatst: 2 september 2002 Dus Qt is niet mogelijk?? Maar hoe doet bv. konqueror dat dan met plugins? Quote Link naar reactie
anoniem Geplaatst: 2 september 2002 Auteur Delen Geplaatst: 2 september 2002 Als je deze vraag in het Engels opstelt wil ik hem wel even vragen in een van de KDE-groepen Max Quote Link naar reactie
anoniem Geplaatst: 2 september 2002 Auteur Delen Geplaatst: 2 september 2002 Hi, I am working on a Qt-MDI interface and I need to load external library's as Qt-mdi-childs. So the main-programming doesn't have to be recompiled in order to implent new Child-windows. I tried a few times with dlopen (-ldl) and compiled the child windows as shared .so files, but without success. Since konqueror (among many other kde programs) uses .so files (e.g. the plugins you can create with kdevelop), maybe someone knows how to implent this using 'just' C++/Qt with no Kde. Thanks, Barry ---- ;) ik zou erg blij zijn als je dit voor me wilt posten en nog veeeeel blijer met een goed antwoord :D Bedankt, Barry Quote Link naar reactie
anoniem Geplaatst: 2 september 2002 Auteur Delen Geplaatst: 2 september 2002 > Maar hoe doet bv. konqueror dat dan met plugins? Waarschijnlijk roept ie een C functie aan en geeft ie wat parameters door. Quote Link naar reactie
anoniem Geplaatst: 2 september 2002 Auteur Delen Geplaatst: 2 september 2002 Hoe :o ???? Maarre het is natuurlijk ook genoeg als ik een gewone executable kan openen in mijn Qt-MDI workspace..... Quote Link naar reactie
anoniem Geplaatst: 2 september 2002 Auteur Delen Geplaatst: 2 september 2002 [quote:6245aa96c2="RobertV"]man 3 dlopen Als je C++ functies probeert te laden heb je een probleem... De C++ ABI werkt heel anders dan de C ABI. En dan heb je ook nog verschillende compilers en versies van g++ die een verschillende implementatie van die ABI hebben en dus verschillende symbolnamen produceren...[/quote:6245aa96c2] Het is toch API (van Application Programming Interface) ? Quote Link naar reactie
anoniem Geplaatst: 2 september 2002 Auteur Delen Geplaatst: 2 september 2002 ff niet afdwalen.... Quote Link naar reactie
anoniem Geplaatst: 2 september 2002 Auteur Delen Geplaatst: 2 september 2002 ABI= Application Binary Interface Ik heb de vraag gepost, ben benieuwd naar het resultaat :) Max Quote Link naar reactie
anoniem Geplaatst: 2 september 2002 Auteur Delen Geplaatst: 2 september 2002 Ik zou niet weten hoe QMDI werkt, maar bekijk dit stukje voorbeeld maar eens: main.cpp: [code:1:eccba288a9] // function pointer typedef void (*MdiFunctie) (QMDI &MijnMDIObject); void *lib; MdiFunctie func; lib = dlopen ("mijn-mdi.so", RTLD_LAZY); if (!lib) { ShowError ("Can't load mijn-mdi.so!"); return; } func = (MdiFunctie) dlsym (lib, "laad_mdi"); if (!func) { ShowError ("Kan functie laad_mdi niet vinden!"); return; } else func (MijnMDIObject); dlclose (lib); [/code:1:eccba288a9] mijn-mdi.cpp [code:1:eccba288a9] #include <qmdi.h> extern "C" // heel belangrijk! zorgt ervoor dat deze functie de C ABI gebruikt laad_mdi (QMDI &MijnMDIObject) { MijnMDIObject.NewWindow(); // of zoiets.... } [/code:1:eccba288a9] Die codes zijn maar voorbeelden en niet getest! Quote Link naar reactie
anoniem Geplaatst: 3 september 2002 Auteur Delen Geplaatst: 3 september 2002 Dankjewel, ik ga het proberen!! Quote Link naar reactie
anoniem Geplaatst: 3 september 2002 Auteur Delen Geplaatst: 3 september 2002 Het was even kl*ten maar het werkt nu wel :) :D Hartelijk dank iedereen!!!!!!! Quote Link naar reactie
anoniem Geplaatst: 4 september 2002 Auteur Delen Geplaatst: 4 september 2002 Ik heb nog ff 1 vraag: Moet ik de library iedere keer sluiten met dlclose()? of gebeurt dat automatisch als de functie klaar is? Quote Link naar reactie
anoniem Geplaatst: 4 september 2002 Auteur Delen Geplaatst: 4 september 2002 Ja, je moet hem elke keer sluiten met dlclose(). Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen