Meilleur auteur de réponses
Pourquoi autoexp ne trouve pas mes dll?

Question
-
Bonjour,
j'essaie de faire un expression evaluator en modifiant le fichier autoexp.dat. J'ai suivi plusieurs tutoriels qui marchaient, quand 'tout a coup' Visual Studio a decide de ne plus trouver mes dll, sans que j'ai fait aucune modification.
Explications:
si je mets dans autoexpand.dat:
[AutoExpand]
MyClass= hello worldLors du debogage, hello world s'affiche bien. Par contre, si je mets MyClass=$ADDIN(MyVisualizer.dll, DebugTest), avec MyVisualizer.dll dans le DevEnvDir et DebugTest qui n'a pas son nom décoré dans le dll (j'ai verifie avec dumpbin), le debogueur n'arrive pas a appliquer le bon traitement (affiche {...} )
J'ai refait un essai avec les sources du tutoriel de EEAddin fourni par microsoft, et cela me donne le meme resultat! J'en deduis que VisualStudio ne trouve pas les fichiers dll... J'ai essaye de rajouter le dossier DevEnvDir (Microsoft Visual Studio 9.0\Common7\IDE\) dans le path, mais rien ne change.
Je ne comprend vraiment pas, d'autant qu'il y a 2 jours tout marchait parfaitement! Quelqu'un saurait-il d'ou vient le probleme?
Merci d'avance
Maxime
Réponses
-
Bonjour,
toujours pas de solution pour faire marcher EEAddin, mais j'ai reussi a faire marcher un autre add-in. Voici ce que j'ai deduit de differents essais:
- dans autoexp.dat, pas besoin de mettre le chemin complet de la dll si celle-ci est dans le dossier IDE
- dans autoexp.dat, ne pas mettre d'espaces avant le nom de la fonction appelee: Image=$ADDIN(MyVisualizer.dll,DebugTest) marche mais Image=$ADDIN(MyVisualizer.dll, DebugTest) ne marche pas
- compiler la dll en Win32, une dll x64 n'est pas detectee.
- Marqué comme réponse Alex Petrescu mardi 1 juin 2010 14:41
Toutes les réponses
-
-
-
Bonjour,
j'ai essaye de faire la manipullation de EEAddin (http://msdn.microsoft.com/fr-fr/library/8fwk67y3%28VS.90%29.aspx) sur un autre ordinateur (Visual Studio 2008 pro, windows XP 32bits), et cela ne marche pas non plus. Le probleme vient donc de moi et pas de la configuration de Visual.
Voici ce que je fais:
- je compile le projet EEAddin (mode release, Win32)
- je copie colle eeaddin.dll dans Microsoft Visual Studio 9.0\Common7\IDE
- j'ajoute les lignes suivantes dans Microsoft Visual Studio 9.0\Common7\Packages\Debugger\autoexp.dat, dans la section [AutoExpand]:
_SYSTEMTIME=$ADDIN(eeaddin.dll,AddIn_SystemTime)
_FILETIME=$ADDIN(eeaddin.dll,AddIn_FileTime)(j'ai verifie les noms des fonctions dans la dll avec le commande dumpbin -exports eeaddin.dll)
- je cree un projet app MFC, j`y mets les lignes suivantes:
SYSTEMTIME *s = new SYSTEMTIME();
FILETIME *f = new FILETIME();
GetSystemTime(s);
SystemTimeToFileTime(s,f);
- je mets un point d`arret sur cette derniere ligne, et je lance le debuggin
- quand je survole s, cela affiche: 0x0034c600 {???}, et quelque chose de similaire pour f.
Donc soit la dll n'est pas trouvee, soit la fonction n'est pas trouvee, soit il y a une exception dans l'execution de la dll.
Dans tous les cas, je ne vois vraiment pas pourquoi cela ne marche pas, etant donne que j'ai scrupuleusement suivi le tutoriel....
J'ai vraiment besoin de faire marcher cela, j'espere que vous pourrez m'y aider.
cordialement, Maxime (desole pour l'absence des accents, je suis sur un clavier qwerty)
-
Bonjour,
J’ai reproduit cet exemple et pour moi les valeurs sont récupérées. C’est vrai que si on survole le pointeur s* on voit { ???}, mais si on regarde les membres de l’objet après l’appel des fonctions GetSystemTime et SystemTimeToFileTime, on voit qu’elles ont des valeurs. Dans votre reproduction de cet exemple, vous ne pouvez voir les valeurs des propriétés ?
Cordialement,
Alex
__________________________________________________________________________________________
Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007
Astuces pour Visual Studio 2010
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework
-
Bonjour,
je peux effectivement voir les valeurs des proprietes, mais cela n'est pas le resultat de l'exemple. Sans rien faire (je veux dire sans utiliser la dll de EEAddin), le debugger arrive de base a voir les valeurs des proprietes. Par exemple, j'ai pour s, wYear=2010, wMonth=5, wDayOfWeek=2, etc.... et pour f, j'ai dwlowDateTime=3083654896, dwhighDateTime=30080024
Mais, si j'ai bien compris ce que fait EEAddin, en ajoutant dans autoexp (avec eeaddin.dll dans le dir IDE)
_SYSTEMTIME=$ADDIN(eeaddin.dll,AddIn_SystemTime)
_FILETIME=$ADDIN(eeaddin.dll,AddIn_FileTime), on devrait avoir l'inverse, c'est a dire pour s des valeurs pour les dwlowDateTime et dwhighDateTime correspondants et pour f wYear, wMonth etc... (sauf erreur de ma part) Or ce n'est pas le cas. De plus j'ai lu quelque part sur le msdn (US) que lorsque {???} s'affiche, cela signifie qu'il y a un probleme.
J'espere avoir ete comprehensible
Cordialement,
Maxime
-
Bonjour,
Apparemment, il faut utiliser le chemin complet pour le dll dans le fichier autoexp.dat. Les points de question « ??? » signifient que la dll n’est pas chargée ou qu’une exception est produite dans le dll. Dans votre cas, je crois que la dll n’était jamais utilisée. Avec le chemin complet, j’ai créé une dll Release Win32 qui bloque l’IDE. La dll x64 ne marche pas. Je vais continuer à investiguer ce problème, pour le moment je n’ai aucune solution.
En cherchant des solutions, j’ai trouvé quelques articles similaires, mais sans utiliser les dll. Peut-être elles vous seront utiles :
http://msdn.microsoft.com/fr-fr/library/aa730838(v=VS.80).aspx
http://through-the-interface.typepad.com/through_the_interface/2006/07/advanced_visual.html
Si vous trouvez quelque chose avant moi, je vous prie d’écrire ici la solution, pour permettre aux autres d’en bénéficier aussi.
Cordialement,
Alex
__________________________________________________________________________________________
Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007
Astuces pour Visual Studio 2010
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework
-
-
Bonjour,
toujours pas de solution pour faire marcher EEAddin, mais j'ai reussi a faire marcher un autre add-in. Voici ce que j'ai deduit de differents essais:
- dans autoexp.dat, pas besoin de mettre le chemin complet de la dll si celle-ci est dans le dossier IDE
- dans autoexp.dat, ne pas mettre d'espaces avant le nom de la fonction appelee: Image=$ADDIN(MyVisualizer.dll,DebugTest) marche mais Image=$ADDIN(MyVisualizer.dll, DebugTest) ne marche pas
- compiler la dll en Win32, une dll x64 n'est pas detectee.
- Marqué comme réponse Alex Petrescu mardi 1 juin 2010 14:41
-
Bonjour,
Merci pour le suivi de ce thread. Je n’avais pas remarqué les espaces dans le nom de la fonction.
Cordialement,
Alex
__________________________________________________________________________________________
Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007
Astuces pour Visual Studio 2010
Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Workflow Foundation