Výsledky 1 až 4 z 4

Téma: Help for beginners (C + C++)

  1. #1

    Standardní Help for beginners (C + C++)

    Dobrej den programovyy!Tak sem vam tu vytvoril pomocne forum pro me :)Chtel sem si pri svych programatorskych zacatcich byt jisty ze se neucim nejake spatne navyky a ze vsemu 100% rozumim a vtom mi nejvice muzou pomoct jedine "pokrocily"!Takze tady obcas napisu nejake veci ktere me matou,ktere nechapu...predem bych chtel podekovat vsem kteri se budou mym problemem zabyvat a pomohou mi ho srovnat v hlave!! andering

  2. #2

    Standardní Pretypovani

    Muj prvni problem je jednoduchy,na internetu pri svem "uceni" sem narazil na :

    -----------------------------------------------------------------------------

    #include <dlfcn.h>
    #include <stdio.h>

    int i = 125;

    int main(int argc, char **argv) {
    /* Ukazatel na interní data reprezentující načtenou knihovnu */
    void *pdll;
    /* Ukazatel na funkci z knihovny. */
    void (*funkceZKnihovny)(void);

    /* Za běhu načteme sdílenou knihovnu. */
    pdll = dlopen("./libknihovna.so", RTLD_LAZY);
    if (!pdll) {
    puts(dlerror());
    return 1;
    }
    /* Z knihovny získáme symbol funkceZKnihovny a ukazatel přetypujeme
    na známý prototyp. "*/
    funkceZKnihovny = (void (*)(void)) dlsym(pdll, "funkceZKnihovny");
    if (!funkceZKnihovny) {
    puts(dlerror());
    dlclose(pdll);
    return 2;
    }
    /* Zavoláme funkci z knihovny. */
    funkceZKnihovny();
    printf("program: i = %i\n", i);
    /* Uvolníme sdílenou knihovnu. */
    dlclose(pdll);
    return 0;

    ----------------------------------------------------------------------------
    viz radek:

    funkceZKnihovny = (void (*)(void)) dlsym(pdll, "funkceZKnihovny");

    viz pretypovani :

    (void (*)(void))

    - jedine co by me zajimalo k cemu je na tomto misto dobre pretypovani,kdyz funkce bude "pretypovana" uz tim ze bude ulozena do pointru ktery je deklarovan na zacatku programu v main !!!
    Dekuji andering
    Naposledy upravil andering; 24.07.2006 v 18:32.

  3. #3
    Member Avatar uživatele ..::Ozzy::..
    Založen
    27.05.2004
    Bydliště
    Vlašim@Benešov
    Věk
    43
    Příspěvky
    176
    Vliv
    258

    Standardní Re: Help for beginners (C + C++)

    Kód:
    dlsym functions as described in the               dlopen(3) man page
    http://www.codecomments.com/archive2...12-730644.html

    Kód:
    Don't use dlsym. Look at somthing like Austria C++ generic factories.
    It is a standard C++ way of doing the same thing.  No need to use extern
    "C".
    Řešení nahrání externí metody

    Kód:
    main.cpp:
    #include <iostream>
    #include <dlfcn.h>
    
    int main() {
        using std::cout;
        using std::cerr;
    
        cout << "C++ dlopen demo\n\n";
    
        // open the library
        cout << "Opening hello.so...\n";
        void* handle = dlopen("./hello.so", RTLD_LAZY);
        
        if (!handle) {
            cerr << "Cannot open library: " << dlerror() << '\n';
            return 1;
        }
        
        // load the symbol
        cout << "Loading symbol hello...\n";
        typedef void (*hello_t)();
    
        // reset errors
        dlerror();
        hello_t hello = (hello_t) dlsym(handle, "hello");
        const char *dlsym_error = dlerror();
        if (dlsym_error) {
            cerr << "Cannot load symbol 'hello': " << dlsym_error <<
                '\n';
            dlclose(handle);
            return 1;
        }
        
        // use it to do the calculation
        cout << "Calling hello...\n";
        hello();
        
        // close the library
        cout << "Closing library...\n";
        dlclose(handle);
    }hello.cpp:
    #include <iostream>
    
    extern "C" void hello() {
        std::cout << "hello" << '\n';
    }
    opsano z http://www.isotton.com/howtos/C++-dl....html#mangling
    Software is like SEX,
    it's better, when it's FREE!

    by Linus Torvalds
    PC:AMD Barton 2500+@3200+ 1,75V locked|ACC rev2|Soltek SL-K600-C|2x512MB DDR433 CL2.5|Saegate80GB 2MB cache ATA/133 + Samsung250GB 8MB cache ATA/133|ATi Saphire R9600XT 537/640|Acer LCD 20" AL2016W 16:10|DVD LG4120|Genius Home Theatre 5.1|Logitech Click@Mouse|dolby keyboard|3R-System case soft moded|TV Tuner Leadtek Winfast DTV1000T|Gentoo 2005.1|KDE 3.5 sometimes switch to WinXP
    Work NB: HP nw8000 + Qtek8310

  4. #4

    Standardní Re: Help for beginners (C + C++)

    To je rozdiel medzi C a C++. V C mozes void pointer priradit do lubovolneho ineho pointera a pretypuje sa sam. V C++ to musis rucne pretypovat.
    1: Asus P2B 1.10 • Celeron 1100@1364/1.8V • 512MB SDRAM • Samsung SP1213N+WD AC28400 • Toshiba XM-6402B+SD-M1212 • PowerColor AR2L Radeon 9100 64MB • 3C900-Combo • Bt848A • ASB-3940UA • AWE-64 • DTK PTP-3007 • VisionMaster 405 • Umax UC630 • Star LC24-200 Colour 2: PCPartner TXB820DS • Cyrix MII PR300/1.8V • 256MB SDRAM • 2xSamsung HD400LD+IT8212F • Accesstek CW4001 • LS-120 • Mystique 4MB • Millennium II 4MB • 3C509 • CMI8329A+Dream MIDI • ADI ProVista E44 • SyncMaster 203B Notebook: DTK FortisPro TOP-5A • P166MMX/1.8V • 80MB EDO • Hitachi 5K80 40GB • 12,1" TFT Router: A-Trend ATC-1425B • i486DX 50@33/5V • 48MB FPM • WD AC14300 • UMC UM9003F • HP PC LAN 16/TP+ Car: Mazda 323P BA • Z5 1489ccm, 65kW@5500rpm, 134Nm@4000rpm

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •