DLL sous windows seven 64b

Résolu
napadbol Messages postés 9 Date d'inscription jeudi 24 février 2005 Statut Membre Dernière intervention 5 octobre 2011 - 26 sept. 2011 à 18:14
napadbol Messages postés 9 Date d'inscription jeudi 24 février 2005 Statut Membre Dernière intervention 5 octobre 2011 - 5 oct. 2011 à 13:25
Bonjour, dans le cadre de mon boulot, on élabore des règles de conception mécanique et développons un freeware qui permet de les mettre en oeuvre ce qui évite tout erreur de mise en oeuvre. Ce freeware est sous VB, mais utilise quelques dll écrites en C++. Forcément, sous Seven 64b, ces dll ne fonctionnement pas.

Nous avons fait l'acquisition de visual studio 2010 (nous travaillions avant avec le 2005) pour mettre à jour ces dll et faire un kit d'install 64bit. J'ai donc créé un projet pour ces dll, vu que j'ai heureusement toujours les sources C++, j'arrive à les générer mais lorsqu'elles sont appelées par le programme, j'ai le message d'erreur suivant :

"Impossible de trouver le point d'entrée 'CDAI_i' dans la DLL 'CDAI'"

CDAI_i est une fonction qui retourne un réel.

J'ai créé un fichier CDAI.def pour l'export mais ça ne change rien.

bref, je suis paumé, et comme vous l'avez certainement compris , si je sais (à peu près) programmer en VB, coté C++ et DLL, je suis une vrai bille.

merci par avance,
Stéph

7 réponses

napadbol Messages postés 9 Date d'inscription jeudi 24 février 2005 Statut Membre Dernière intervention 5 octobre 2011
5 oct. 2011 à 13:25
Ayé, pb réglé. Pour info (ca peut toujours intéressé une autre personne) : il suffit de compiler le soft en VB en forçant une compilation 32 bit
3
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
26 sept. 2011 à 19:04
Forcément, sous Seven 64b, ces dll ne fonctionnement pas.

Pourquoi? forcément... les seuls soucis de compatibilité que j'ai rencontré sous ce système sont des soucis des répertoires "User" ou/et "Program Files(x86)" et les programmes compilés en 16b

"Impossible de trouver le point d'entrée 'CDAI_i' dans la DLL 'CDAI'"

Je présume que la dll que tu as compilé est CDAI.dll ... peut importe:
Si il manque ce point d'entrée c'est soit que cette fonction n'existe pas dans tes sources (ou pas sous ce nom), soit qu'elle est mal exportée... est-elle présente dans le fichier *.def en sortie de compil ?
0
napadbol Messages postés 9 Date d'inscription jeudi 24 février 2005 Statut Membre Dernière intervention 5 octobre 2011
27 sept. 2011 à 09:53
Bonjour,
oui, c'est effectivement CDAI.dll. Concernant la compilation de la dll initial, vu que cela a été fait il y a déjà un bail, il est probable qu'elle soit en 16b.
D'après ce que j'ai pu lire sur le net, effectivement j'ai un pb d'export. D'après ce que je comprend de ta réponse, un fichier CDAI.def doit être créé à la compilation ? ce n'est pas le cas, je l'ai créé moi même avec le code suivant :

LIBRARY CDAI
EXPORTS
CDAI_i

... et ajouté aux fichiers d'en-tête, en spécifiant dans les propriétés qu'il s'agit d'un élément de type en-tête C/C++ . J'en déduis que ce fichier n'est pas pris en compte. La fonction existe bien dans les sources. Il y a certainement un truc à faire dans les paramétrages mais là je suis paumé.
0
fregolo52 Messages postés 1115 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 3
28 sept. 2011 à 13:51
Pour ce genre de problème dépendencies walker est ton meilleur allié.

Ta dll en C++ (et ton soft VB) marche sur quel OS ?

Des programmes ou dll 32bit marchent très bien sous Win 7 x64 sans aucune modif.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
28 sept. 2011 à 15:32
Pour le *.def j'avoue que sous visualstudio je suis pas très sûr.
Sinon tu pense qu'elle est en 16b ? mais je croyais tu tu l'avais recompilé ... donc elle est au minimum en 32b ...
En ce qui concerne l'export c'est certainement le soucis... trouve le header qui contient "CDAI_i" et donnes-nous le s'il te plait. (enfin si tu as bien les sources...)
0
napadbol Messages postés 9 Date d'inscription jeudi 24 février 2005 Statut Membre Dernière intervention 5 octobre 2011
30 sept. 2011 à 10:38
Bonjour et merci de prendre le temps de me répondre.

‘Ta dll en C++ (et ton soft VB) marche sur quel OS ?’
-> Windows totue versions, sauf seven 64b – le soft plante à cause des DLL

‘tu penses qu'elle est en 16b ? mais je croyais tu tu l'avais recompilé’
-> Les DLL de la version actuelles ont été compilées il y pas loin de 10 ans , donc c'est probable. D'autant plus, si les DLL 32 bits ne sont pas censées poser de pb.

-> J’ai bien les sources, mais la conversion du projet dans VS2010 n’a pas fonctionnée : j’ai recréé un projet à la main avec le source CDAI.cpp et le fichier d’entête CDAI.def, que j'ai recompilé. Maintenant, la DLL semble bien reconnue et lue mais j'ai ce pb de définition de point d'entré que ne permet pas d'identifier la fonction de calcul contenue dans la DLL

-> Dans le projet, en plus de ces deux fichiers, il n’y a rien d’autre que des fichiers créés apparemment par défaut(stdafx.cpp et .h, dllmain.cpp, targetvar.h).

‘trouve le header qui contient "CDAI_i" et donnes-nous le s'il te plait.’
-> Il n’y a que le fichier CDAI.def
0
napadbol Messages postés 9 Date d'inscription jeudi 24 février 2005 Statut Membre Dernière intervention 5 octobre 2011
5 oct. 2011 à 11:30
Je suis reparti de zéro, refait un projet CDAI, en créant un CDAI.cpp, CDAI.h et CDAI.def.
Une fois la DLL compilée, je la teste dans une macro excel, et ça marche .

Dans l'appli visual basic, au moment de l'appel j'ai une nouvelle erreur :

Tentative de chargement d’un programme de format incorrect. (Exception de HRESULT : 0x8007000B)

Je teste un ancien version exécutable du soft, qui me met la même erreur à l'appel de cette nouvelle DLL.
0