cs_tnabon
Messages postés1Date d'inscriptionsamedi 17 juillet 2004StatutMembreDernière intervention18 juillet 2004
-
18 juil. 2004 à 17:54
fbossens
Messages postés3Date d'inscriptiondimanche 26 avril 2009StatutMembreDernière intervention28 avril 2009
-
28 avril 2009 à 22:32
Bonjour,
Je cherche à créer une dll qui soit compatible avec Visual Basic ou VBA. Quand je crée une dll en C avec visual studio il est en effet impossible de l'utiliser avec Excel VBA. Quelqu'un peut-il me venir en aide svp ?
D'autre part quelqu'un connait-il une bonne façon de bien apprendre Visual Studio, par un livre ou un tutorial ?
claudenjikam
Messages postés2Date d'inscriptionvendredi 1 octobre 2004StatutMembreDernière intervention 1 octobre 2004 1 oct. 2004 à 12:02
J'ai le même problème.
J'arrive pas à bien remplir le working directory dans les settings afin de faire comprendre à ma dll quelle doit être lier à un fichier excel.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 1 oct. 2004 à 13:14
Comment ça, une dll 'liee' a un fichier Excel ???
C'est le vba dans Excel qui va se servir de la dll mais la dll ne sera liee QUE au systeme si elle est ecrite correctement.
Et voilà la declararion dans le VBA d'Excel.:
Declare Function somat Lib "C:\DllSimple.dll" (ByVal x As Integer, ByVal y As Integer) As Integer
ça marche parfaitement dans l'environnement de developpement. J'utilise l'Excel et i fait appel à l fonction et donne le resultat.
PAr contre, si je copie la DLL et je fais la déclaration dans un autre ordinateur, ça ne marche plus. Quelqu'un saurrait me dire pour quoi? Dois-je faire quoi pour que ça marche?
Merci d'avance,
Otavio Reis
Vous n’avez pas trouvé la réponse que vous recherchez ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 11 avril 2007 à 15:19
C'est As Long, params 16 bits sont du siècle dernier, As Integer est à bannir partout dans VB.
Où est le message d'erreur, il n'y a pas de devin ici.
Si c'est que ne trouve pas ta DLL, suffit de mettre la dll dans dossier du xls et d'un appel SetCurrentDirectory() sur ThisWorkbook.Path dans l'event d'ouverture du classeur xls.
otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008 11 avril 2007 à 15:38
Dans l'environnement de developpement, Excel affiche correctement le resultat de la fonction.
Hors l'environnement de developpement, Excel met le erreur sur la celule: #VALEUR!
Il ne trouve pas la DLL, mais le chemin indiqué est correct. Le prob avec le SetCurrentDirectory() sur ThisWorkbook.Path est que je vais être oubligé de poser la DLL dans plusieurs endroit selon les différents fichiers qui vont faire appel, non?
otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008 11 avril 2007 à 16:05
oui, cela a été déjà fait. J'explique le probleme plus en détail:
- Je compile ma DLL sur une machine virtuel (l'ambiance de developpement du Visual Studio). Je copie la DLL et je la pose sur Windows\system32. J'ouvre l'Excel dans le même ambiance et Excel accède la DLL sans pb.
- Je sors de la machine virtuel (l'ambiance de developpement du Visual Studio), je copie la DLL et je la pose sur Windows\system32. J'ouvre l'Excel et ça ne marche pas. Voilà.
otavioreis
Messages postés82Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention 4 mars 2008 11 avril 2007 à 17:50
Je crois que j'ai trouvé le pb. Dans la machine où je programme, il y a une dll qui s'appelle MSVCR80D.DLL. Dans les autres machines, il n'y en a pas. Vous savez comment résoudre ça?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 11 avril 2007 à 19:14
Déja on ne livre jamais un binaire en debug mais en release.
TEMPLATES C/C++ POUR VS 2005
http://www.cppfrance.com/code.aspx?ID=36940 avec ça tu ferais des projets correctement configurés qui te débarrasserait de msvcr80.dll comme de toute autre dépendance.
fbossens
Messages postés3Date d'inscriptiondimanche 26 avril 2009StatutMembreDernière intervention28 avril 2009 27 avril 2009 à 22:17
Bonjour,
Je m'aperçois que la dernière réponse date d'il y a plus de 2 ans,
Mais je suis aussi occupé à esayer de faire une dll c++ avec visual studio 2008, et j'ai eu le même problème de portabilité (#valeur) qu'Otavio Reis.
J'ai donc essayé les templates de BruNews. Mais je ne suis pas sûr quel template utiliser pour une dll c++.
J'ai utilisé cDLL mais j'ai environ 500 erreurs, et l'impression que je suis en train de compiler en C et non en c++.
Quelqu'un peut m'indique un template pour une dll c++ VS2008, correctement portable sur machines avec windowx XP ?
Sinon comment configurer le projet VS2008 pour que le .dll généré en release soit portable ?
fbossens
Messages postés3Date d'inscriptiondimanche 26 avril 2009StatutMembreDernière intervention28 avril 2009 28 avril 2009 à 22:32
Merci beaucoup pour la réponse rapide,
Mais le code de ma dll (à part la déclaration proprement dite des fonctions) contenant des classes et de la syntaxe spécifiquement c++, j'ai l'impression que le template cDLL que tu proposes ne convient pas, par contre, j'ai fnialement réussi à compiler ma dll sans l'inclure dans le template cDLL, mais en settant l'option suivante (désolé j'utilise vs en anglais):
project-->properties-->c/c++-->code generation--> runtime library : Multi threaded (\MT).
D'après ce que j'ai compris le link est fait statiquement et non dynamiquement. Le "xxx.dll" créé n'a plus de dépendence et est portable.