Compatibilité DLL

Résolu
cherwam07 Messages postés 2 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 janvier 2009 - 20 août 2008 à 14:16
cherwam07 Messages postés 2 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 janvier 2009 - 20 août 2008 à 23:52
Bonjour

J'aurai besoin de votre aide sur un problème concernant les DLL.

Je travail en C, j'ai créé une DLL avec devc++.
Donc quelque chose comme :
dll.h
#ifdef BUILDING_DLL
    #define DLL_EXPORT __declspec (dllexport)
#else
    #define DLL_EXPORT __declspec (dllimport)
#endif

DLL_EXPORT int maFonction(void);       

dll.c
DLL_EXPORT int maFonction(void){
.
..
...
}       

Et j'ai utilisé cette DLL dans un programme, fait également avec devc++, compilé
en incluant dll.h, et en linkant le fichier libdll.a qui avait été généré.
Fonctionnement impeccable.

Ca s'est gaté quand j'ai voulu utiliser cette DLL dans un code compilé avec visual studio.
J'y ai écrit un code C, dans un fichier .c, j'ai bien spécifié de compiler comme du C.
J'ai linké libdll.a (sinon ca ne compile pas, donc signe qu'il reconnait bien la librairie)

Et à l'execution : erreur de windows (envoyer un rapport d'erreur, blablabla), quand le programme
essai d'appeler une fonction de la DLL.
Et le comportement est le même si la DLL est dans le même repertoire OU NON, signe
qu'il ne la cherche même pas.

Alors si quelqu'un a une idée sur la cause de ce problème, il sera le bienvenu ;)

Je penche plutot pour un problème de configuration de visual studio, mais le problème
est peut-etre plus profond.

D'avance merci

2 réponses

Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
20 août 2008 à 15:50
Ce serait plus pratique que tu poste tout le code.

Neo_Fr
3
cherwam07 Messages postés 2 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 19 janvier 2009
20 août 2008 à 23:52
Ce serait plus pratique que tu poste tout le code.

Mais tout y est !
Je recommence : voici EXACTEMENT le code de quelque chose qui ne fonctionne pas.

Avec DEVC++, en C, je crée une DLL.

dll.h :

#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */

DLLIMPORT void HelloWorld (void);

#endif /* _DLL_H_ */

dllmain.c :
#include "dll.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

DLLIMPORT void HelloWorld ()
{
    printf("Hello World from DLL!\n");
}

La compilation génère
<li>DLLtest.dll</li><li>libDLLtest.a</li><li>libDLLtest.def</li>
Maintenant le code qui est censé charger et utiliser la DLL

main.c :

#include <stdio.h>
#include <stdlib.h>
#include "dll.h"

int main(void)
{
  HelloWorld();
 
  system("PAUSE");   
  return 0;
}

+ Dans l'éditeur de lien, je link libDLLtest.a

Pas bien compliqué n'est-ce pas ?? (ma vraie appli est plus fournie lol)

Avec DEVC++, l'application de test compile, et fonctionne très bien.

SI je place le même code (celui de l'application de test) dans Visual C++ (2008), en mettant dans les options du projet : compiler comme du C, à l'execution un terminal s'ouvre, "coucou" s'y affiche, et ensuite à l'appel de la fonction : erreur de windows.

Alors qu'en pensez vous ?
DEVC++ genérerait-il mal les DLL ?
Y a-t-il des options dans visual que j'aurai raté ??

Merci
0
Rejoignez-nous