Ga naar inhoud

Programmeren met modules


anoniem

Aanbevolen berichten

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
Link naar reactie
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
Link naar reactie
[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) ?
Link naar reactie
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!
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...