includere dll in c++
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Visualizzazione risultati da 1 a 9 di 9

Discussione: includere dll in c++

Cambio titolo
  1. #1
    Keroro
    Ospite

    includere dll in c++

    stavo seguendo questa guida:
    http://msdn.microsoft.com/it-it/library/ms235636.aspx

    quando arrivo ad aggiungere al path il percorso di dove si trova la mia dll, e poi compilo il codice mi da errore qui #include "MathFuncsDll.h" in pratica non trova la dll..
    someone can help? inoltre in questo caso sto aggiungendo una dll fatta da me e già fallisco xD, quando voglio aggiungere una dll esterna, già compilata, di cui io non ho documentazione, come faccio a sapere quali sono le funzioni che devo definire (nel mio caso la dll è un interfaccia)..

    ho sempre programmato in java quindi tutto il concetto di librerie dinamiche e statiche un po mi manca, porca miseria

  2. #2
    Utente
    Registrato il
    02-06
    Località
    ...
    Messaggi
    4.972
    Non ho capito.
    Hai creato con successo la dll e vuoi linkarla in un altro progetto o stai creando il progetto che una volta compilato genera la dll?
    Se sei nel primo caso, #include "MathFuncsDll.h" è l'header che contiene l'interfaccia esposta dalla dll, non la dll stessa.
    Quando vuoi linkare una dll, devi includere gli header nel progetto, in modo da sapere cosa è contenuto in quella dll, e poi a runtime viene caricata la dll vera e propria.
    Quell'errore significa che nel codice stai cercando di includere un file (l'header della dll) che lui non trova e non sa dove cercare.
    Devi andare nelle impostazioni e impostare i path di ricerca degli header, aggiungendo il percorso dove si trova MathFuncsDll.h

  3. #3
    Keroro
    Ospite
    ma quindi nel path deve trovare l'header? ero convito di mettere il path per la dll :S cmq ora io sono messo così... un progetto con una dll perfettamente compilata e un progetto con il programma vero e proprio che include l'header della dll ma non lo trova.
    cmq il fatto di tutto ciò e che io sto cercando di utilizzare una dll senza avere l'header, è possibile o è da pazzi?

    il motivo di ciò è che ho trovato una specie di esercizio in cui chiede di fare una piccola ia di un gioco dove le funzioni da implementare sono definite in questa dll e non ho nessun altro file

    fino a questo passo della guida tutto ok:
    Le librerie a collegamento dinamico non vengono caricate dall'eseguibile fino al runtime. È necessario segnalare al sistema dove si trova il file MathFuncsDll.dll. Questa operazione viene eseguita tramite la variabile di ambiente PATH. Nella finestra di dialogo Pagine delle proprietà espandere il nodo Proprietà di configurazione e selezionare Debug. Accanto alla casella Ambiente, digitare quanto segue: percorso PATH=< del file MathFuncsDll.dll>, dove il percorso < del file MathFuncsDll.dll> viene sostituito con la posizione effettiva del file MathFuncsDll.dll. Scegliere OK per salvare tutte le modifiche.
    Ultima modifica di Keroro; 27-11-2011 alle 21:50:24

  4. #4
    Utente
    Registrato il
    02-06
    Località
    ...
    Messaggi
    4.972
    Citazione Keroro Visualizza Messaggio
    ma quindi nel path deve trovare l'header? ero convito di mettere il path per la dll :S cmq ora io sono messo così... un progetto con una dll perfettamente compilata e un progetto con il programma vero e proprio che include l'header della dll ma non lo trova.
    cmq il fatto di tutto ciò e che io sto cercando di utilizzare una dll senza avere l'header, è possibile o è da pazzi?

    il motivo di ciò è che ho trovato una specie di esercizio in cui chiede di fare una piccola ia di un gioco dove le funzioni da implementare sono definite in questa dll e non ho nessun altro file

    fino a questo passo della guida tutto ok:
    Le librerie a collegamento dinamico non vengono caricate dall'eseguibile fino al runtime. È necessario segnalare al sistema dove si trova il file MathFuncsDll.dll. Questa operazione viene eseguita tramite la variabile di ambiente PATH. Nella finestra di dialogo Pagine delle proprietà espandere il nodo Proprietà di configurazione e selezionare Debug. Accanto alla casella Ambiente, digitare quanto segue: percorso PATH=< del file MathFuncsDll.dll>, dove il percorso < del file MathFuncsDll.dll> viene sostituito con la posizione effettiva del file MathFuncsDll.dll. Scegliere OK per salvare tutte le modifiche.
    Le DLL vengono caricate dinamicamente, ma possono essere linkate all'applicazione in 2 modi.

    Il primo (link implicito) è quello indicato dalla guida che stai seguendo, ovvero compilare la applicazione con gli header e la .lib della dll, così l'applicazione determina a compile time gli entry point della dll e sa come usarla.
    Finchè non mandi in esecuzione l'applicazione della dll non te ne fai nulla.

    Il secondo (link esplicito) è linkare la dll a runtime dando il nome ad una funzione di sistema LoadLibrary(), che chiede al sistema operativo di caricarla e ti ritorna l'entry point della dll.
    Questo però richiede di ottenere nel codice i puntatori a funzione dentro la dll, e una conoscenza più avanzata della programmazione C++.

    Qui la differenza http://msdn.microsoft.com/it-it/library/253b8k2c.aspx

    Nel tuo caso, se hai compilato la dll tu stesso, hai anche gli header e la libreria statica .lib, e ricadi nel primo caso.
    Altrimenti ricadi nel secondo ed il tutorial è quello sbagliato

  5. #5
    Keroro
    Ospite
    Citazione CorralX Visualizza Messaggio
    Le DLL vengono caricate dinamicamente, ma possono essere linkate all'applicazione in 2 modi.

    Il primo (link implicito) è quello indicato dalla guida che stai seguendo, ovvero compilare la applicazione con gli header e la .lib della dll, così l'applicazione determina a compile time gli entry point della dll e sa come usarla.
    Finchè non mandi in esecuzione l'applicazione della dll non te ne fai nulla.

    Il secondo (link esplicito) è linkare la dll a runtime dando il nome ad una funzione di sistema LoadLibrary(), che chiede al sistema operativo di caricarla e ti ritorna l'entry point della dll.
    Questo però richiede di ottenere nel codice i puntatori a funzione dentro la dll, e una conoscenza più avanzata della programmazione C++.

    Qui la differenza http://msdn.microsoft.com/it-it/library/253b8k2c.aspx

    Nel tuo caso, se hai compilato la dll tu stesso, hai anche gli header e la libreria statica .lib, e ricadi nel primo caso.
    Altrimenti ricadi nel secondo ed il tutorial è quello sbagliato
    grazie mille forse un minimo ci ho capito... solo che ho seguito filo e per segno la prima guida, creato la mia dll MathFuncsDll ma in MathExecRefsDll non la vede.. i codici sono esattamente quelli che vedi nella guida, l'unica cosa che non va è quando compilo MathExecRefsDll mi dice :

    Errore 2 error C1083: Impossibile aprire il file inclusione 'MathFuncsDll.h': No such file or directory

  6. #6
    Utente
    Registrato il
    02-06
    Località
    ...
    Messaggi
    4.972
    Citazione Keroro Visualizza Messaggio
    grazie mille forse un minimo ci ho capito... solo che ho seguito filo e per segno la prima guida, creato la mia dll MathFuncsDll ma in MathExecRefsDll non la vede.. i codici sono esattamente quelli che vedi nella guida, l'unica cosa che non va è quando compilo MathExecRefsDll mi dice :

    Errore 2 error C1083: Impossibile aprire il file inclusione 'MathFuncsDll.h': No such file or directory
    Ah ok, se stai seguendo la guida, il problema è che non hai settato i path di ricerca degli header.
    Devi andare nelle proprietà del progetto, Configurations Properties -> C/C++ e nella sezione General se ricordo bene, alla voce "Additional Include Directories" devi mettere anche il percorso alla cartella che contiene gli header della dll.

  7. #7
    Keroro
    Ospite
    Citazione CorralX Visualizza Messaggio
    Ah ok, se stai seguendo la guida, il problema è che non hai settato i path di ricerca degli header.
    Devi andare nelle proprietà del progetto, Configurations Properties -> C/C++ e nella sezione General se ricordo bene, alla voce "Additional Include Directories" devi mettere anche il percorso alla cartella che contiene gli header della dll.
    non trovo la voce che dici te :S l'unica che trova è PATH sotto debug e ci metto questo:
    PATH=C:\Users\Francesco\Documents\Visual Studio 2010\Projects\MathFuncsDll\Debug;C:\Users\Francesco\Docume nts\Visual Studio 2010\Projects\MathFuncsDll\MathFuncsDll

    nel primo indirizzo risiede la dll nel secondo l'header e il file cpp..

    e poi sotto proprietà comuni/framework e riferimenti, faccio aggiungo nuovo riferimento e automaticamente mi trova MathFuncsDll

    edit: trovata la voce diectory inclusioni aggiuntive e ho aggiunto:
    ;C:\Users\Francesco\Documents\Visual Studio 2010\Projects\MathFuncsDll\Debug;C:\Users\Francesco\Docume nts\Visual Studio 2010\Projects\MathFuncsDll\MathFuncsDll

    ma niente ancora xD
    Ultima modifica di Keroro; 28-11-2011 alle 19:03:47

  8. #8
    Utente
    Registrato il
    02-06
    Località
    ...
    Messaggi
    4.972
    Citazione Keroro Visualizza Messaggio
    non trovo la voce che dici te :S l'unica che trova è PATH sotto debug e ci metto questo:
    PATH=C:\Users\Francesco\Documents\Visual Studio 2010\Projects\MathFuncsDll\Debug;C:\Users\Francesco\Docume nts\Visual Studio 2010\Projects\MathFuncsDll\MathFuncsDll

    nel primo indirizzo risiede la dll nel secondo l'header e il file cpp..

    e poi sotto proprietà comuni/framework e riferimenti, faccio aggiungo nuovo riferimento e automaticamente mi trova MathFuncsDll

    edit: trovata la voce diectory inclusioni aggiuntive e ho aggiunto:
    ;C:\Users\Francesco\Documents\Visual Studio 2010\Projects\MathFuncsDll\Debug;C:\Users\Francesco\Docume nts\Visual Studio 2010\Projects\MathFuncsDll\MathFuncsDll

    ma niente ancora xD
    Il posto (directory inclusioni aggiuntive) è quello giusto.
    Devi dargli il percorso della cartella che contiene MathFuncsDll.h
    Credo dovrebbe essere C:\Users\Francesco\Docume nts\Visual Studio 2010\Projects\MathFuncsDll ma prova a guardare da esplora risorse e fai copia-incolla del percorso in alto.

  9. #9
    Keroro
    Ospite
    ah finalmente ci so riuscito xD grazie.. certo sulla guida potevano specificare sto passaggio lol

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •