Vraag & Antwoord

OS Linux

Programmeren met modules

14 antwoorden
  • 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
  • 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...
  • Dus Qt is niet mogelijk?? Maar hoe doet bv. konqueror dat dan met plugins?
  • Als je deze vraag in het Engels opstelt wil ik hem wel even vragen in een van de KDE-groepen Max
  • 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
  • > Maar hoe doet bv. konqueror dat dan met plugins? Waarschijnlijk roept ie een C functie aan en geeft ie wat parameters door.
  • Hoe :o ???? Maarre het is natuurlijk ook genoeg als ik een gewone executable kan openen in mijn Qt-MDI workspace.....
  • [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) ?
  • ff niet afdwalen....
  • ABI= Application Binary Interface Ik heb de vraag gepost, ben benieuwd naar het resultaat :) Max
  • 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!
  • Dankjewel, ik ga het proberen!!
  • Het was even kl*ten maar het werkt nu wel :) :D Hartelijk dank iedereen!!!!!!!
  • Ik heb nog ff 1 vraag: Moet ik de library iedere keer sluiten met dlclose()? of gebeurt dat automatisch als de functie klaar is?

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.