Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [c++]win dll e lib

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,807

    [c++]win dll e lib

    Ciao.
    Dove sta la differenza tra usare le dll e i .lib ?
    Se ho una dll devo avere anche un file di definizione delle funzioni giusto?
    Ho scaricato uno zip contenente Devil(un programma per gestire le immagini) ma ha solo 3 dll , come faccio ad avere il .h per richiamare le funzioni?
    Ce n'è bisogno o si fa senza ?
    Scusate l'ignoranza.
    ciao.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,302

    Re: [c++]win dll e lib

    Originariamente inviato da giuseppe500
    Dove sta la differenza tra usare le dll e i .lib ?
    Le DLL sono librerie dinamiche, utilizzate "a runtime" dai programmi.

    Le LIB sono librerie statiche, utilizzate nella fase della compilazione in modo che un programma possa

    1) conoscere ed importate nomi/argomenti delle funzioni da poi chiamare nelle DLL (avendo il .h)

    oppure

    2) inserire direttamente nell'eseguibile finale il codice delle funzioni stesse in modo da essere eseguito senza DLL (sempre con il .h)

    La LIB non è necessaria perchè puoi anche caricare ed usare "dinamicamente" la DLL, quando ti serve, anche per una singola funzione. Naturalmente devi conoscere nome/parametri delle funzioni ...

    Se ho una dll devo avere anche un file di definizione delle funzioni giusto?
    Per fare cosa?

    Ho scaricato uno zip contenente Devil(un programma per gestire le immagini) ma ha solo 3 dll , come faccio ad avere il .h per richiamare le funzioni? Ce n'è bisogno o si fa senza ?
    Se non hai altro, ovviamente non te ne fai nulla delle DLL. In questo modo hai solamente il supporto "run time" per un programma che utilizza le DLL, non puoi "sviluppare" nulla ...

    Scusate l'ignoranza.
    Purtroppo sono argomenti abbastanza vasti che prevedono delle "basi" e un po' di conoscenza dei sistemi ... non si può esaurire tutto in una risposta in un forum ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,807
    Grazie Oregon , scusa se ti disturbo ma devo capire una cosa:
    Se creo una libreria .lib(libA) che ha delle dipendenze da altre .lib ,e includo come lib(nel pannello link di visual studio)questa libreria(sempre libA) in un applicazione App1, devo includere ancora una volta tutte le librerie utilizzate da libA?
    Come si procede?
    Grazie.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,302
    Originariamente inviato da giuseppe500
    Grazie Oregon , scusa se ti disturbo ma devo capire una cosa:
    Se creo una libreria .lib(libA) che ha delle dipendenze da altre .lib ,e includo come lib(nel pannello link di visual studio)questa libreria(sempre libA) in un applicazione App1, devo includere ancora una volta tutte le librerie utilizzate da libA?
    Come si procede?
    Grazie.
    No ... non dovresti.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,807
    il fatto è che ho compilato una libreria (.lib) con delle dipendenze (alla fine della compilazione mi si crea un .lib).
    Ho incluso in un altro progetto questa libreria , ma ottengo questi errori:
    1>Linking...
    1>Wm4Graphics90d.lib(ImageEx.obj) : error LNK2019: unresolved external symbol __imp__ilGetData@0 referenced in function "public: class ImageEx * __thiscall ImageEx::Load(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (?Load@ImageEx@@QAEPAV1@ABV?$basic_string@DU?$char _traits@D@std@@V?$allocator@D@2@@std@@_N@Z)
    1>Wm4Graphics90d.lib(ImageEx.obj) : error LNK2019: unresolved external symbol __imp__ilGetInteger@4 referenced in function "public: class ImageEx * __thiscall ImageEx::Load(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (?Load@ImageEx@@QAEPAV1@ABV?$basic_string@DU?$char _traits@D@std@@V?$allocator@D@2@@std@@_N@Z)
    1>Wm4Graphics90d.lib(ImageEx.obj) : error LNK2019: unresolved external symbol __imp__ilConvertImage@8 referenced in function "public: class ImageEx * __thiscall ImageEx::Load(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (?Load@ImageEx@@QAEPAV1@ABV?$basic_string@DU?$char _traits@D@std@@V?$allocator@D@2@@std@@_N@Z)
    1>Wm4Graphics90d.lib(ImageEx.obj) : error LNK2019: unresolved external symbol __imp__ilDeleteImages@8 referenced in function "public: class ImageEx * __thiscall ImageEx::Load(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (?Load@ImageEx@@QAEPAV1@ABV?$basic_string@DU?$char _traits@D@std@@V?$allocator@D@2@@std@@_N@Z)
    1>Wm4Graphics90d.lib(ImageEx.obj) : error LNK2019: unresolved external symbol __imp__ilLoadImage@4 referenced in function "public: class ImageEx * __thiscall ImageEx::Load(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (?Load@ImageEx@@QAEPAV1@ABV?$basic_string@DU?$char _traits@D@std@@V?$allocator@D@2@@std@@_N@Z)
    1>Wm4Graphics90d.lib(ImageEx.obj) : error LNK2019: unresolved external symbol __imp__ilGenImages@8 referenced in function "public: class ImageEx * __thiscall ImageEx::Load(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (?Load@ImageEx@@QAEPAV1@ABV?$basic_string@DU?$char _traits@D@std@@V?$allocator@D@2@@std@@_N@Z)
    1>Wm4Graphics90d.lib(ImageEx.obj) : error LNK2019: unresolved external symbol __imp__ilutInit@0 referenced in function "public: class ImageEx * __thiscall ImageEx::Load(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (?Load@ImageEx@@QAEPAV1@ABV?$basic_string@DU?$char _traits@D@std@@V?$allocator@D@2@@std@@_N@Z)
    1>Wm4Graphics90d.lib(ImageEx.obj) : error LNK2019: unresolved external symbol __imp__iluInit@0 referenced in function "public: class ImageEx * __thiscall ImageEx::Load(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (?Load@ImageEx@@QAEPAV1@ABV?$basic_string@DU?$char _traits@D@std@@V?$allocator@D@2@@std@@_N@Z)
    1>Wm4Graphics90d.lib(ImageEx.obj) : error LNK2019: unresolved external symbol __imp__ilInit@0 referenced in function "public: class ImageEx * __thiscall ImageEx::Load(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" (?Load@ImageEx@@QAEPAV1@ABV?$basic_string@DU?$char _traits@D@std@@V?$allocator@D@2@@std@@_N@Z)
    1>C:\programmazione\wild magic 4\GeometricTools\WildMagic4\Builds\Builds\Debug\te st.exe : fatal error LNK1120: 9 unresolved externals
    1>Build log was saved at "file://c:\programmazione\wild magic 4\GeometricTools\WildMagic4\Builds\Builds\test\Deb ug\BuildLog.htm"
    1>test - 10 error(s), 0 warning(s)


    questo è imageex.h:
    codice:
    #include "wm4image.h"
    #include "il/il.h"
    #include <string>
    class ImageEx : Wm4::Image
    {
    public:
    	ImageEx(void);
    	~ImageEx(void);
    	ImageEx* Load (const std::string& rkImageName, bool bAbsolutePath);
    };
    e questo è il .cpp
    codice:
    #include "Wm4GraphicsPCH.h"
    #include "ImageEx.h"
    #include <string>
    #include "il/Il.h"
    
    ImageEx::ImageEx(void)
    {
    }
    
    ImageEx::~ImageEx(void)
    {
    }
    
    ImageEx* ImageEx::Load(const std::string& rkImageName, bool bAbsolutePath)
    {
    	
    	ilInit();
    	iluInit();
    	ilutInit();
    	ILuint imageID = -1;
    	ILboolean imageLoaded;
    
    	GLuint width;
    	GLuint height;
    	GLuint bpp;
    	GLuint format;
    
    	ilGenImages( 1, &imageID );
    
    	
    	imageLoaded = ilLoadImage( rkImageName.c_str() );
    
    	if ( !imageLoaded )
    	{
    		ilDeleteImages( 1, &imageID );
    		return false;
    	}
    	else
    	{
    		imageLoaded = ilConvertImage( IL_RGBA, IL_UNSIGNED_BYTE );
    
    		if ( !imageLoaded )
    		{
    			ilDeleteImages( 1, &imageID );
    			return false;
    		}
    
    		width = ilGetInteger( IL_IMAGE_WIDTH );
    		height = ilGetInteger( IL_IMAGE_HEIGHT );
    		bpp = ilGetInteger( IL_IMAGE_BPP );
    		format = ilGetInteger( IL_IMAGE_FORMAT );
    
    		int IMGWidth, IMGHeight;
    
    		IMGWidth = (int)width;
    		IMGHeight = (int)height;
    		m_aucData = (unsigned char*) ilGetData();
    	}
    	return this;
    }
    tutte le chiamate a funzioni danno un link error , mentre i tipi no.
    Ribadisco che questo compila e genera la libreria, solo se la inserisco in un altro progetto e compilo ho gli errori di sopra .

    Questo è l'altro progetto:
    codice:
    #include "stdafx.h"
    #include "IL/Il.h"
    #include "imageex.h"
    using namespace Wm4;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	ImageEx* im = new ImageEx();
    	return 0;
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,807
    Se puo essere d'aiuto sto lavorando su un engine grafico gia fatto e utilizza dei file .inl dove sono definite le funzioni inline del tipo:
    codice:
    //----------------------------------------------------------------------------
    inline Image::FormatMode Image::GetFormat () const
    {
        return m_eFormat;
    }
    //----------------------------------------------------------------------------
    inline const std::string& Image::GetFormatName () const
    {
        return ms_akFormatName[m_eFormat];
    }
    includi in dei .h
    Cosa sono e a cosa servono queste funzioni inline?
    Il progetto produce una lib o una dll a seconda delle scelte di compilazione precisamente debug , debugdll, release, releasedll
    ma sono necessarie tutte e 2 per utilizzare la library e lanciare l'eseguibile generato.

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 © 2020 vBulletin Solutions, Inc. All rights reserved.