Se connecter / S'enregistrer
Votre question

[Résolu] Problème d'ouverture projet Visual C++ .NET

Tags :
  • Visual studio
  • Programmation
Dernière réponse : dans Programmation
9 Février 2010 17:35:00

Bonjour,

J'ai besoin de modifier une DLL existante, qui a été programmée en C++ (ou en C...). Elle sert à faire l'interface entre le bas-niveau d'une liaison GPIB et le haut niveau d'un programme en JAVA, avec les points d'entrée-sortie standards.

J'ai le répertoire du projet qui a été fait avant moi, mais comme je ne connais que le java je ne sais pas s'il est complet.

Mon réel problème est que je ne sais pas vraiment avec quel EDI il a été créer, c'est soit Microsoft Visual C++ 6.0, soit Microsoft visual Studio .NET, soit Microsoft Visual C++ .NET.

J'ai un dossier contenant le fichier .sln, ncb et suo (solution), et un sous-dossier contenant un fichier projet .vcproj ainsi que les sources. (.h, .cpp, .obj, .rc, .aps)


Pourquoi Microsoft Visual C++ 6.0 n'ouvre que des fichiers .cpp, .h, ou .c, et non pas les .sln ou .vcproj ? Est-ce normal/possible ?

Pourquoi Microsoft visual Studio .NET est incapable de reconnaitre les fichiers .vcproj ?? (CF capture d'écran 1 & 2)

Pourquoi je n'arrive pas à trouver sur le net Microsoft Visual C++ .NET ? Ou un plugin qui permettrait à Microsoft visual Studio .NET d'ouvrir les vcproj ?




J'ai téléchargé Microsoft Vissual C++ 2008 Express Edition, importé et converti le projet en version 2008, et réussi à recompiler ma DLL sans erreur, mais elle pèse 20ko alors que l'originale en pèse 67ko.
Et lorsque je la remplace dans le dossier de mon programme Java, j'ai une erreur au lancement du prog : Error : The JVM could not be started.
En somme le code qui tente de charger la DLL bug. L'erreur est :

  1. java.lang.UnsatisfiedLinkError: C:\*mon-chemin*\GPIBDriverDll.dll: Cette application n'a pas pu démarrer car la configuration de l'application est incorrecte. Réinstaller l'application pourrait résoudre ce problème


En somme mes questions sont :

-Pourquoi la DLL ne se recompile pas comme elle devrait ?
-Pour retrouver lEDI d'origine, que dois-je faire ? Où trouver ce fichu Microsoft Visual C++ .NET ?
-Pourquoi il y a-t-il autant de logiciels .NET C++ Studio et tout le bordel ? Quelles sont leurs différences ?
-Que dois-je modifier pour que ça compile comme avant ?

Mes questions sont floues, désolé, car pour moi le problème est flou lui aussi.
Ca fait 2 jours que je m'embourbe dans la boue des quantités pharamineuses de logiciels microsofts, de modification de fichiers et de café serré, donc je suis un peu sur les nerfs. Surtout qu'il va absolument faloir que je modifie cette DLL à ma sauce.

Sinon solution extrême : si je dois reprendre le projet à zéro, sachant que j'ai les sources .cpp et les heares .h (j'ai même des fichiers .obj et .rc tout fait, je sais pas ce que c'est), est-ce que quelqu'un serait à-même de m'aider ?


Merci d'avance, rien que pour avoir pris le courage de tout lire !

Minimus.

Autres pages sur : resolu probleme ouverture projet visual net

a b L Programmation
9 Février 2010 19:42:19

Je pense que dans le cas cas de la grande dll, c'était compilé en mode debug, et que toi tu compiles en mode release (sans les infos de debug). Il se peut que le paramétrage en mode release soit foireux.

Pour l'exécution, vérifie les fonctions exportées de ta DLL.
m
0
l
9 Février 2010 22:06:32

Merci pour ta rapide réponse CRicky !

Les modes Debug/Release expliqueraient une telle différence de taille?

Je vais revérifier demain mes points d'entrées/sortie, ou tenter de re-générer le header directement à partir de mon code java, et comparer avec ce qui est déjà fait.

Minimus.
m
0
l
Contenus similaires
a b L Programmation
9 Février 2010 22:39:50

En debug, il y a toutes les infos de debug (lignes dans le code etc), et en plus ce n'est pas optimiser pour justement debugger chaque ligne.
m
0
l
10 Février 2010 09:57:49

Bonjour !

J'ai regardé les fonctions, elles sont tout à fait correctes.
Par exemple pour ma fonction "private static native void ibonl (int ud, int on);" qui se situe dans "classes\berline\busDriver\implementation" j'ai la fonction en C++ qui va avec : "JNIEXPORT void JNICALL Java_berline_busDriver_implementation_GpibDriver_ibonl(JNIEnv *e, jobject o, jint ud, jint on)"

J'ai relu quelques forums et c'est bien la syntaxe que ma fonction en C++ doit prendre, je me suis aidé de cette page : http://java.sun.com/docs/books/jni/html/start.html
Sur mon PC de dev, mon programe s'ouvre, mais j'ai une erreur "Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: ibonl" dès que je veux lancer ma partie réseau GPIB.

Sur le PC connecté aux instruments de mesure reliés par GPIB, rien ne change, "The JVM could not be started"...

Je ne comprends pas du tout pourquoi la JVM n'arrive pas à faire le lien entre ma DLL et ma classe...

Minimus.
m
0
l
a b L Programmation
10 Février 2010 20:51:38

Tu as bien la classe berline.busDriver.implementation.GpibDriver?
As-tu mis la DLL à côté du .class/.jar?

Tu peux essayer en donnant directement le répertoire des DLL native:
  1. java -Djava.library.path=le_chemin_de_bibliothèque ton_prog_java

m
0
l
11 Février 2010 08:39:07

Oui ma classe existe bien à cet endroit, et mon programme se compose d'un exécutable et de son .jar à côté. J'ai déjà une DLL du même nom actuellement, et je cherche à la remplacer. Donc si je remplace l'ancienne par la nouvelle, du même nom, en théorie je n'ai rien à changer pour dire que cette DLL est là, puisqu'elle était déjà connue avant.
Je suis vraiment embêté là :/ 

Minimus.
m
0
l
a b L Programmation
11 Février 2010 20:46:10

Et tes 2 DLL ont exactement les mêmes interfaces d'export ?
m
0
l
12 Février 2010 08:39:33

Bonjour,

Alors d'une part j'ai réussi à trouver un programme capable de lire les points d'entrée/sortie des librairies, je ne savais même pas que cela existait : DLL Export Viewer.
Donc j'ai examiné la DLL originale qui fonctionne et la DLL que je tente de faire fonctionner.

  1. DLL 1 (fonctionnelle) :
  2. Function Name Address Relative Ordinal
  3. ___CPPdebugHook 0x0040d17c 0x0000d17c 10 (0xa)
  4. Java_berline_busDriver_implementation_GpibDriver_getErrorCode 0x0040149d 0x0000149d 9 (0x9)
  5. Java_berline_busDriver_implementation_GpibDriver_ibclr 0x004012cc 0x000012cc 3 (0x3)
  6. Java_berline_busDriver_implementation_GpibDriver_ibdev 0x0040129f 0x0000129f 2 (0x2)
  7. Java_berline_busDriver_implementation_GpibDriver_ibonl 0x004013ff 0x000013ff 6 (0x6)
  8. Java_berline_busDriver_implementation_GpibDriver_ibrd 0x0040136e 0x0000136e 5 (0x5)
  9. Java_berline_busDriver_implementation_GpibDriver_ibwrt 0x00401301 0x00001301 4 (0x4)
  10. Java_berline_busDriver_implementation_GpibDriver_isError 0x00401476 0x00001476 8 (0x8)
  11. Java_berline_busDriver_implementation_GpibDriver_readStatusByte 0x0040143f 0x0000143f 7 (0x7)
  12. Java_berline_busDriver_implementation_GpibDriver_sendIFC 0x00401280 0x00001280 1 (0x1)
  13.  
  14. DLL 2 :
  15. Function Name Address Relative Ordinal
  16. _Java_berline_busDriver_implementation_GpibDriver_sendIFC@12 0x10003570 0x00003570 9 (0x9)
  17. _Java_berline_busDriver_implementation_GpibDriver_readStatusByte@16 0x100035d0 0x000035d0 8 (0x8)
  18. _Java_berline_busDriver_implementation_GpibDriver_isError@8 0x100035e0 0x000035e0 7 (0x7)
  19. _Java_berline_busDriver_implementation_GpibDriver_ibwrt@16 0x100035a0 0x000035a0 6 (0x6)
  20. _Java_berline_busDriver_implementation_GpibDriver_ibrd@12 0x100035b0 0x000035b0 5 (0x5)
  21. _Java_berline_busDriver_implementation_GpibDriver_ibonl@16 0x100035c0 0x000035c0 4 (0x4)
  22. _Java_berline_busDriver_implementation_GpibDriver_ibdev@16 0x10003580 0x00003580 3 (0x3)
  23. _Java_berline_busDriver_implementation_GpibDriver_ibclr@12 0x10003590 0x00003590 2 (0x2)
  24. _Java_berline_busDriver_implementation_GpibDriver_getErrorCode@8 0x100035f0 0x000035f0 1 (0x1)


Donc mis à part les différences d'adresse que l'on peut trouver, et l'ordre des fonctions, la différence majeure c'est l'ajout de ces @ à la fin de mes fonctions.

Quelle peut-être la raison de ceci ? Les paramètres du projet ? J'ai constaté que selon les paramètres du projet la DLL de sortie pouvait faire 19ko, 25ko, 38ko, etc...

Les paramètres que jai testé sont :
-Utilisation des MFC
-utilisation des ATL
-Jeu de caractères
-Prise en charge du Common Language Runtime

Mais il y a tellement d'options dans tellement de menus, la chance pour que je retombe sur les mêmes options que le projet de base est infime...

D'autre part, avec la DLL version 38ko, j'ai réussi (je pense) à passer l'étape de la reconnaissance des fonctions (malgré les @ ????), l'erreur que la JVM me renvioe est : "UnsatisfiedLinkError: C:\*mon chemin*\Berline\lib\GpibDriverDll.dll: Can't find dependent libraries".

Mais de quoi c'te DLL a besoin de plus?

Minimus.
m
0
l
12 Février 2010 12:14:59

Bon, le problème est résolu, j'ai appliqué ces paramètres-ci pour la génération du projet sous Visual C++ 2008 Express :
-Général > Type de configuration : Bibliothèque dynamique (.dll)
-Général > Utilisation des MFC : Utiliser els MFC dans une bibliothèque statique
-Général > Utilisation des ATL : N'utilisant pas les ATL
-Général > Jeu de caractères : Non défini
-Général > Prise en charge du Common Language Runtime : Pas de prise en charge

Et ma DLL a enflée de quelques ko, et totalement fonctionnelle.

Note : les signature des fonctions sous DLL Export Viewer contiennent toujours les @ ainsi que les "_" en début de signature.

Merci pour ton aide CRicky :) 

Minimus.
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS