IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Chargement d'une DLL


Sujet :

MFC

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut Chargement d'une DLL
    Bonjour,

    je souhaiterais utiliser dans un programme la DLL GZip.DLL.
    Mais voilà mon problème : comment accéder aux fonctions de cette DLL quand on ne connaît pas leur nom ni leur prototype ?

    PS : j'aimerais utiliser la fonction de decompression

    Merci par avance

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Normalement on n'utilise pas ainsi une dll à l'aveugle parce que:
    - normalement on a les .h / .lib + la doc ce qui simplifie son utilisation
    - si on l'a pas c'est souvent parce qu'on a pas le droit de se servir de la dll
    et là, tadaaaaa!
    http://www.zlib.net/
    tout ce qu'il faut pour utiliser facilement cette lib

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    ha d'accord,
    la dll zlib permet de faire la même chose, mais elle est ouverte ...

    merci !!

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    Bon je n'ay arrive pas :
    j'ai utilsé la librairie statique zlibstat.lib (que j'ai ajouté dans mon projet-> settings) et j'ai ajouté sa déclarative :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int uncompress (char *dest,   unsigned long *destLen, const char *source, unsigned long sourceLen);
    mais lorsque je l'appelle dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	unsigned long destLen = 0;
    	int r = uncompress (".\\TEST", &destLen, ".\\DATA0.DAT.gz", 387045);
    j'ai une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error LNK2001: unresolved external symbol "int __cdecl uncompress(char *,unsigned long *,char const *,unsigned long)" (?uncompress@@YAHPADPAKPBDK@Z)
    Si qqun a une idée ?

  5. #5
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par olive_le_malin
    j'ai ajouté sa déclarative :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int uncompress (char *dest,   unsigned long *destLen, const char *source, unsigned long sourceLen);
    Tu l'a déclarée comme fonction C++.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern "C" int uncompress (char *dest,   unsigned long *destLen, const char *source, unsigned long sourceLen);
    Inclure le .h livré avec t'aurait évité cette erreur.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    ben le soucis, c'est que j'ai pas de .h livré avec.
    J'ai pris ici :
    http://www.winimage.com/zLibDll/zlib123dll.zip
    et je n'ai pas le .h

    Donc j'ai aussi téléchargé :
    http://prdownloads.sourceforge.net/g...use_mirror=ovh
    et là y a un zlib.h

    mais quand je l'utilise, j'ai une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f:\archive\_dev\clientftp\zconf.h(289) : fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory
    Donc c'est pour ça que je n'ai pas utilisé leur .h
    Je vais essayer avec ta méthode.

    Merci

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    cela ne marche pas mieux,
    cette fois j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Linking...
    clientFTP.obj : error LNK2001: unresolved external symbol _uncompress
    Debug/clientFTP.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.
     
    clientFTP.exe - 2 error(s), 0 warning(s)

  8. #8
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Ben oui il te faut le .lib (link avec zdll.lib)
    Tout est là :
    - .h
    - .lib
    - .dll
    http://www.zlib.net/zlib123-dll.zip

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    heu oui,
    d'accord mais moi pour ne pas promener une dll avec mon exec, je voulias le linker statiquement à zlibstat.lib que l'on peut trouver ici :
    http://www.winimage.com/zLibDll/zlib123dll.zip
    C'est ça qui ne marche pas ...

    @+

  10. #10
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Tu as ajouté ce .lib à ton projet ?

  11. #11
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    moi j'utilise ziparchive et ça fonctionne tres bien.
    utilisation (exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include "..\ZipArchive\ZipArchive.h"    
    CZipArchive     m_zip;
    m_zip.SetCallback(&m_InfosZip);
    m_zip.Open(m_strPathBackupFile,CZipArchive::zipCreate,0);
    m_zip.AddNewFile(m_pFileFind->GetFilePath(),str);    
    m_zip.Close();
    c'est pas compliqué a utiliser.
    http://farscape.developpez.com/Samples/ziparchive.zip
    j'ai deja parametre la librairie pour vc6 ,il n'y a plus qu'a utiliser.
    il faudra inclure la lib au projet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #ifdef _DEBUG
    #pragma comment(lib, "dZipArchive.lib")
    #else
    #pragma comment(lib, "ZipArchive.lib")
    #endif

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    Bonjour à vous,

    Aurelien :
    oui, le .lib je l'ai bien ajouté à mon projet (c'est le zlibstat.lib), mais bon ça ne marche pas ...
    Je vais continuer à chercher ... J'aimerais vraiment passer par une .lib statique, plutot que par une dll promenable.

    farscape :
    merci pour la bibliothèque CZipArchive, mais mon soucis c'est que je dois pouvoir décompresser du gzip ...

    @+

  13. #13
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Si tu as déclaré la fonction extern "C" (ou utilisé le .h) et lié avec le .lib, ça devrait passer. C'est quoi l'erreur ?

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    bonjour,
    j'ai pris le truc comme tu me l'avais conseillé : avec le .dll
    je n'ai plus de soucis de link ! Déjà merci.

    mais ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	int srcFile = _open("F:\\archive\\_dev\\clientFTP_ZLIB\\TEST\\DATA0.DAT.gz", _O_RDONLY | _O_BINARY);
    	unsigned long srcSize = _filelength( srcFile );
    	unsigned long destSize = srcSize * 50;
     
    	unsigned char* srcBuf = (unsigned char*)malloc(srcSize);
    	unsigned char* destBuf = (unsigned char*)malloc(destSize);
     
    	_read(srcFile, srcBuf, srcSize);	
    	_close(srcFile);
     
    	int r = uncompress (destBuf, &destSize, srcBuf, srcSize);
    me renvoie r = Z_DATA_ERROR (corrompu)

    je ne voie pas où je fais une erreur ?

    @+

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    j'ai essayé avec un fichier comprésse avec gzip (.gz) et un fichier compressé avec zip (.zip), mais dans les 2 cas j'ai la même erreur : Z_DATA_ERROR
    Si qqun a une idée ?

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    bon je suis passé par ça :
    http://cvsweb.xfree86.org/cvsweb/uti...gzip.c?rev=1.2
    et ça marche ...
    je pense que c'est parce que le format à décompesser est du gzip, et non pas celui standard de zlib.
    voilà
    merci

Discussions similaires

  1. [Win32]Problème au chargement d'une DLL C++
    Par FamiDoo dans le forum MFC
    Réponses: 22
    Dernier message: 05/07/2006, 11h10
  2. [VB] Problème de chargement d'une DLL
    Par Elijha dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/05/2006, 09h24
  3. Réponses: 4
    Dernier message: 03/11/2005, 13h57
  4. Contexte de chargement d'une DLL
    Par Guillemot dans le forum Windows
    Réponses: 2
    Dernier message: 10/07/2005, 09h34
  5. Chargement d'une DLL et utilisation du multithread
    Par Maitre Kanter dans le forum Langage
    Réponses: 6
    Dernier message: 07/09/2004, 23h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo