Caricare dinamicamente dll

di il
22 risposte

22 Risposte - Pagina 2

  • Re: Caricare dinamicamente dll

    Si le vedo pero' anzichè esserci MouseProc, c'e _MouseProc@12 !!!
    io ho scritto
    #define LIBRERIA extern "C" __declspec(dllexport)
    per evitarew il name manglin!
  • Re: Caricare dinamicamente dll

    Infatti se faccio
    hkprcSysMsg=(HOOKPROC)GetProcAddress(hinstDLL, "_MouseProc@12")
    funziona!
    Come faccio ad evitare che il compilatore mi cambi il nome?
  • Re: Caricare dinamicamente dll

    Appunto x quello devi definire un file .def dove vai a specificare i nomi delle funzioni esportate.
    vedi il mio esempio
    
    LIBRARY SILABSFE
    EXPORTS
    SeekStation
    GetModuleName
    GetModuleInfo
    HWInit
    HWDeInit
    TuneFreq
    GetSignal
    IsStereo
    ScanStation
    GetCurrStation
    FMTune
    FMTuneUp
    FMTuneDown
    GetRdsData
    
    ecc
  • Re: Caricare dinamicamente dll

    Io ho fatto un file .h, dove indico le funzioni esportate in questo modo:
    #ifndef LIBRERIA
    #define LIBRERIA extern "C" __declspec(dllimport)
    #endif
    
    LIBRERIA LRESULT CALLBACK MouseProc( __in  int nCode, __in  WPARAM wParam, __in  LPARAM lParam);
    LIBRERIA long getNumber();
    non basta? devo includere questo .h nell'applicazione?
    Se invece faccio il .def, lo devo includere?
  • Re: Caricare dinamicamente dll

    Allora rimaniamo nella dll. Lascia stare l'applicazione che la userà.
    Apri le proprietà del proggetto e vai su Linker->Input

    Nella voce Module definitions File: li dai il percorso del file .def che non è altro che un file di testo come l'esempio che ti ho messo sopra.

    Ricompila e i nomi delle funzioni saranno a posto.
  • Re: Caricare dinamicamente dll

    Questo è l'esempio x la tua libreria (a patto che la libreria si chiami libreria.dll)
    
    LIBRARY LIBRERIA
    EXPORTS
    MouseProc
    getNumber
    
  • Re: Caricare dinamicamente dll

    Ok grazie! Ho ancora un problema:
    ho una variabile condivisa
    #pragma data_seg("Shared")
    	long volatile *messaggi=0;
    #pragma data_seg( )
    Al'l'interno dell'hook la devo incrementare e faccio
    InterlockedIncrement(messaggi);
    Pero' mi genera un'accezione!
    • Eccezione first-chance a 0x750e1349 in Applicazione.exe: 0xC0000005: Violazione di accesso nella scrittura del percorso 0x00000000.
    Allora come la devo inizializzare la variabile messaggi?
  • Re: Caricare dinamicamente dll

    *messaggi è un puntatore che punta a un long inesistente. Sta a te decidere come gestirlo. Così come l'hai scritto non ha senso.
Devi accedere o registrarti per scrivere nel forum
22 risposte