Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

OS Linux

Programmeren met modules

RobertV
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

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