DLL sous windows seven 64b

Résolu
Signaler
Messages postés
9
Date d'inscription
jeudi 24 février 2005
Statut
Membre
Dernière intervention
5 octobre 2011
-
Messages postés
9
Date d'inscription
jeudi 24 février 2005
Statut
Membre
Dernière intervention
5 octobre 2011
-
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

Messages postés
9
Date d'inscription
jeudi 24 février 2005
Statut
Membre
Dernière intervention
5 octobre 2011

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
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

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 ?
Messages postés
9
Date d'inscription
jeudi 24 février 2005
Statut
Membre
Dernière intervention
5 octobre 2011

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é.
Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
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.
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

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...)
Messages postés
9
Date d'inscription
jeudi 24 février 2005
Statut
Membre
Dernière intervention
5 octobre 2011

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
Messages postés
9
Date d'inscription
jeudi 24 février 2005
Statut
Membre
Dernière intervention
5 octobre 2011

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.