Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C++] Creazione DLL

  1. #1

    [C++] Creazione DLL

    Ciao Ragazzi,
    So che questo argomento è stato trattato da LeleFT nel 2004.
    ho letto tutto, ho provato a ripercorrere alcuni suoi passi, ma mi sono arenato.
    Al dunque..
    WInXP SP3
    Visual C++ Express Edition
    Voglio creare semplicissima DLL e richiamarla da un altrettanto banale programma
    Win 32 console APP. Il tutto sempre i VC++Exp Ed

    I miei passi sono stati i seguenti:
    Creato progetto Console application ( no DLL perchè il flag mi appare in grigetto e non posso editarlo... Qualcuno sa dirmi perchè io non posso?)

    Copiato da post precedente il seguente programma:

    [Come si fa a creare le finestrelle dove mettere il codice?]
    codice:
    /* mydll.dll */
    
    #include <windows.h>
    #include <stdafx.h>
    
    /* ENTRY-POINT */
     BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
    {
        return TRUE;
    }
    
    /* Funzione Somma */
    extern "C" __declspec(dllexport) int   Somma(int a, int b)
    {
        return a+b;
    }
    Eseguo il build impostando il configuration Type: Dynamic Library
    Nessun errore

    Copio anche il programma che utilizza la DLL

    codice:
    // UsoLibreria.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include "windows.h"
    
    
    extern "C" __declspec(dllimport) int   Somma(int a, int b);
    
    int main()
    {
        printf("%d\n", Somma(10, 5) );
        return 0;
    }
    Nel progetto imposto : Proprietà -> Linker->General-> Additionl Library-> ... Path della DLL creata precedentemente.

    Eseguo Build che restituisce errore:
    "error LNK2019: unresolved external symbol __imp__Somma referenced in function _main"

    Cosa mi manca? Scusate se è una banalità, ma non so cosa fare

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [C++] Creazione DLL

    Originariamente inviato da pallocchio
    Creato progetto Console application ( no DLL perchè il flag mi appare in grigetto e non posso editarlo... Qualcuno sa dirmi perchè io non posso?)
    Finito di impostare la directory e il progetto, fai click su next o finish?

    [Come si fa a creare le finestrelle dove mettere il codice?]
    http://forum.html.it/forum/showthrea...hreadid=973887
    Punto 7.

    Cosa mi manca? Scusate se è una banalità, ma non so cosa fare
    Insieme alla DLL ti viene creato anche un .lib. E' quello che devi linkare insieme al main.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Ciao,
    Grazie della risposta.
    Allora, quando creo il progetto clicco su Next e in questa pagina posso vedere che la possibilità di creare una DLL mi viene negata perchè i flag è in grigetto.

    Mi piacerebbe capire il perchè di questo , tuttavia ho trovato delle indicazioni dell'Help di Microsoft che dice per posso crearla ugualmente eseguendo il Build esplicitando che desidero un file .dll di uscita.

    Per quanto riguarda il file .lib, si trova nella stessa directory del file .dll creato:
    Nel progetto imposto : Proprietà -> Linker->General-> Additionl Library-> ... Path della DLL creata .
    Questo link è sufficiente o devo i .lib vanno linkati con comandi o cose differenti dai .dll?

    Ciao e grazie

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da pallocchio
    Mi piacerebbe capire il perchè di questo
    Non so che dirti. Mai avuto un problema simile.
    Questo link è sufficiente o devo i .lib vanno linkati con comandi o cose differenti dai .dll?
    A parte che le DLL non si linkano, ma solo i .lib corrispondenti.
    In quel modo indichi al compilatore una directory aggiuntiva dove il linker deve cercare delle librerie. Aggiungi:
    codice:
    #pragma comment(lib, "mydll.lib")
    al main o in alternativa aggiungi ai source files mydll.lib.
    La prima soluzione però funziona solo con VC++
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Ciao Shodan,
    Grazie della pazienza.
    La tua indicazione circa i .lib , mi ha portato ad aggiungere in "Additional Dependecies" il mio file .lib.
    Non lo sapevo, ma ho visto il kernel32.lib e ho aggiunto il mio lib.

    Quindi adesso ha funzionato bene.
    Ti ringrazio tanto!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da pallocchio
    Allora, quando creo il progetto clicco su Next e in questa pagina posso vedere che la possibilità di creare una DLL mi viene negata perchè i flag è in grigetto.
    Mi sa che è una limitazione dell'interfaccia della versione Express.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.