nicrolfi
Messages postés138Date d'inscriptionsamedi 10 mars 2007StatutMembreDernière intervention16 avril 2013
-
30 mai 2007 à 16:59
nicrolfi
Messages postés138Date d'inscriptionsamedi 10 mars 2007StatutMembreDernière intervention16 avril 2013
-
5 juin 2007 à 18:09
Bonjour,
J'ai chargé un programme en VB sur ce site (programme de pilotage de moteurs pas à pas par le port //).
Je n'arrive pas à faire tourner ce programme et, c'est également l'avis de l'auteur de la source, je rencontre des difficultés peut-être dues aux différences de version.
Voici donc les questions que je me pose et des réponses pourraient beaucoup m'aider:
- sous Win XP, il semble nécessaire d'utiliser une dll d'entrée sortie par le port // (inpout.dll par exemple)
- le programme est fait dans VB6 et je n'ai que VB5. Dans VB6, le programme fonctionne (chez l'auteur) en déclarant inpout.dll en sortie comme SUB et en entrée comme Function. Ces déclarations sont écrites dans le code de la feuille VB. Dans VB5, cela ne marche pas. Ne faut il pas déclarer les SUB et Function (externes) dans un module plutôt que dans la feuille? Si oui, est-ce la même syntaxe?
- dans VB6, il ne semble plus nécessaire de déclarer des SUB et Function internes (le code de la sub ou de la function est écrit dans la feuille). Faut-il les déclarer sous VB5? Si oui, où?
Mille merci d'avance pour l'aide....car je suis bloqué...
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 30 mai 2007 à 17:10
De ce point de vue là, la syntaxe est strictement la même entre VB5 et VB6.
Si tu déclare tes fonctions de la dll, dans l'écran lui-même, il faut les déclarer obligatoirement en Private.
Si tu les déclare dans un module il ne faut pas les mettre Private sinon elles ne seront visible que du module.
Apparemment VB bloque au lancement: "VB a rencontré un problème". Comme chez moi avec VB6 celà marche, j'ai supposé que le pb venait de l'IDE VB5, mais qu'est-ce qui ne lui plait pas???? That is the question.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 30 mai 2007 à 19:01
Bon,
1) Je viens de lire la totalité des lignes de code de cette source et n'y ai absolument rien vu (du code écrit) que VB5 ne comprendrait pas.
2) il y a bien un problème à l'ouverture du projet ("retained is not...." ) mais il s'agit là du plus classique et c'est contournable d'au moins deux façons, dont la plus propre est encore la reconstitution du projet en y ajoutant les forms existantes une par une.
3) Je n'ai pas installé la librairie inpout32.dll par regsvr32 et il en dénonce l'absence au run du projet.
Je ne vais pas enregistrer cette librairie car elle ne me servirait à rien sans la carte correspondante.
je suis allé voir cette librairie de plus près : elle est bien compatible Windows et est en 32 bits
VB5 ne me parait n'avoir rien à voir dans cette utilisation, donc, si la librairie est bien enregistrée.
Il est par contre important que cette librairie puisse être reconnue par ton OS (32 bits ou non ?).
4) Ajoute de toutes manières un module à ton projet et mets-y en public les deuc déclarations de fonction de cette Dll.
Je ne comprends d'ailleurs pas, à ce propos, pourquoi les avoir déclarées 4 fois (dans chacune des 4 forms) en Private au lieu de ne les déclarer qu'une seule fois en Public dans un module !
Mais celà n'a toujours rien à voir avec la faille (VB5 est parfaitement capable, comme VB6, de travailler sur des fonctions déclarées en Private sur la Form qui les utilise)
Ma conclusion ? si, après avoir enregistré la DLL (et mets-là donc dans System32) par regsvr32, le problème persiste (ne trouverait pas la DLL), celà voudrait dire que ton OS n'accepte pas les fichiers en 32 bits !
Si par contre tu obtiens un autre message d'erreur, ce serait autre chose.
Dis-nous ....
nicrolfi
Messages postés138Date d'inscriptionsamedi 10 mars 2007StatutMembreDernière intervention16 avril 2013 30 mai 2007 à 19:28
à jmfmarques
Le moins qu'on puisse dire c'est que savez de quoi vous parlez...
Merci de cette aide.
L'enregistrement de la inpout.dll ne s'est pas faite lorsque j'ai glissé inpout.dll sur l'icone regsvr32. J'ai reçu le message
"c:\Windows\system32\inpout32.dll a été chargé mais le point d'entrée DIREGisterServer est introuvable. Ce fichier ne peut pas être enregistré."
Selon VBGenesis l'auteur du programme de pilotage des moteurs, cela devrait être du au fait que sur certains PC c'est nécessaire d'enregistrer, sur d'autres pas. Je n'ai donc pas insisté...
Avez-vous une autre façon d'enregistrer cette dll?(que de glisser la dll sur regsvr)
La ligne "Retained..." a été supprimée manuellement
Où puis-je aller voir si mon OS est en 32bits? C'est Windows XP.
Je vais ajouter un module avec les deux " Private Declare...", les supprimer dans les 4 feuilles...Cela ne coûte rien et je ne risque rien à le faire...
Ensuite faire un essai...je noterai exactement le message reçu et vous le transmettrai.
Y-a-t-il une solution si l'OS n'accepte pas 32 bits.? Il y a d'autres dll similaire io.dll par exemple.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 30 mai 2007 à 20:17
La dll inpout32.dll n'a pas besoin d'etre enregistrer dans la base de registre, d'ailleurs l'enregsitrement ne marche pas.
C'est une dll APi et non pas une dll COM, seules les dll COM doivent etre enregistrée dans la base de registre.
Je peux certifier que cette dll marche parfaitemùent avec VB5 et VB6 sur les systèmes Windows NT4.0, Windows 2000 et Windows XP.
Par contre sous Windows 98 et Millenium, je ne serais pas surpris qu'elle ne marche pas. mais sur ces systèmes là, les ports sont directement accèssible avec l'ancienne methode du temps de msdos
nicrolfi
Messages postés138Date d'inscriptionsamedi 10 mars 2007StatutMembreDernière intervention16 avril 2013 30 mai 2007 à 20:45
A vous deux,
Après un essai qui date de quelques minutes:
situation: Windows XP, VB5
la inpout.dll est dans les dossier System et System32 (contenant aussi chacun regsvr32)
j'ai mis les déclaration de SUB et Function de la dll en public et dans un module
j'ai mis des ' devant les deux lignes correspondantes des 4 feuilles d'origine.
j'ai branché le moteur par le port //
Je lance
J'obtiens un message "VB a rencontré un problème et doit fermer...
Si je vais voir le rapport, j'y trouve:
AppName: vb5.exe
AppVer: 5.037.24
Mod name: inpout32.dll ce qui me fait croire que la dll est concernée par le problème
Mod ver 0.0.0.0
Offset 00008201
cs_Exploreur
Messages postés4821Date d'inscriptionlundi 11 novembre 2002StatutMembreDernière intervention15 novembre 201615 30 mai 2007 à 20:55
Salut et bonsoir à tous,
Il me semble Casy que cette Dll ne fonctionne pas avec un "noyau" NT, du moins de la même techno(niveau accés sur les ports)...Je dit cela parce que je l'aie utilisée dans un prog, qui pilote les ports //, et cela plante sur les sytèmes à partir de Win2000, par contre sous 98/98Se/Me pas de souçis...
je l'ai extraite dans system32
dans le module, j'ai déclaré ainsi :
Public Declare Function Inp Lib "C:\WINNT\SYSTEM32\InpOut32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "C:\WINNT\SYSTEM32\InpOut32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
Comme je suis sous Windows 2000, mon chemin de system32 et celui que j'ai mis en rouge
Corrige WINNT par ce que tu as chez toi Pour XP
J'ai relancé le programme et je n'ai plus d'erreur.
Essaye et dis nous