Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    [C++] Come usare le Dll

    Ciao ragazzi
    Prima di postare ho cercato in internet ma non ho trovato un gran che e non sono riuscito a compilare niente.
    Volevo iniziare con una cosa semplice:

    codice:
    #include <iostream.h>
    
    int main() 
    {
    
    cout << "Ora verrà richiamata la dll";
    
    //Richiamo delle funzioni nella dll (non ho capito come si fà)
    //funz(1);
    cin.get();
    return 0;
    }
    Codice della .dll

    codice:
    //Volevo che risulatasse un codice equivalente a questo:
    
    int funz (int var)
    {
    cout<<var;
    return 0;
    }
    Grazie in anticipo

    P.S. Dimenticavo il compilatore che uso: Dev-C++ 4.9.9.2

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Qui
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    Grazie

    Grazie dopo lo provo ma quindi con questo carico il dll che poi posso utilizzare come posse un progetto modulare giusto?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    "la" dll ... non "il" dll ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    cmq ho capito bene?

    cmq ho capito bene?

  6. #6
    Hai capito bene.
    Per usare la funzione contenuta nella dll dovrai dichiarare un puntatore alla funzione valorizzandolo con getprocaddress, fatto questo il puntatore alla funzione può eseguire la funzione nella dll.

    Tieni presente che questo è il "link dinamico", serve principalmente per caricare funzioni che adoperi saltuariamente nel programma alla bisogna per poi eventualmente liberare le risorse quando non ti servono più.

    Se invece sono funzioni che adoperi in modo intensivo ti consiglierei di linkare la dll direttamente nel tuo programma (link statico).
    ...

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    Ragazzi

    Ho provato a implementare la dll con LoadLibrary, ma poi quando vado a richiamare la funzione mi dà errore di compilazione perchè non trova il contenuto della funzione cane():

    ecco il semplice codice
    Codice PHP:
    #include <windows.h>

    int cane();

    int main()
    {
    LoadLibrary("C:\\Users\\Niko\\Desktop\\Dev-c++\\Progetto2.dll"
    );
    /*GetProcAddress(
      0,
      "cane"//?????????? serve questa funzione?
    );*/

    cane();
        return 
    0;

    ed ecco la dll
    Codice PHP:
    #include <windows.h>

    int cane ()
    {
    MessageBox(NULL,"","",0);  
    return 
    0;


  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ricordi che nelle costanti stringa il carattere \ si scrive \\ ??
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    scusate

    Vero!!! Comunque oregon ho sistemato il backslash ma niente da fare stesso errore....

  10. #10
    Ovviamente dovrai:
    • nella dll, esportare la funzione cane tramite un file .def da dare in pasto al linker;
    • nell'eseguibile, dichiarare un puntatore a funzione con la stessa firma della funzione da richiamare;
    • dopo aver caricato la dll in memoria, dovrai quindi assegnare a questo puntatore il valore restituito dalla GetProcAddress.

    Questo per quanto riguarda il link dinamico; all'atto pratico poi è molto più comodo usare il link statico con libreria di importazione, ma francamente le dll sono un argomento piuttosto ampio per poterle spiegare al volo su un forum. Per questo ti rimando alla documentazione ufficiale MSDN e al capitolo relativo alle dll che c'è in qualunque libro di programmazione Win32 (per darti un'idea, il Rector-Newcomer dedica 50 pagine all'argomento, e non è neanche troppo esaustivo).
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.