Problème utilisation DLL Inpout32

stephantasy Messages postés 6 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 30 mars 2010 - 19 mars 2010 à 21:40
stephantasy Messages postés 6 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 30 mars 2010 - 23 mars 2010 à 19:48
Bonjour,

Après de nombreuses heures de recherches, je me rends à l’évidence… Il me faut de l’aide !

J’ai tapé ce petit bout de code pour lire mon port parallèle :

----------------------------------------------------------------------
Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer

Sub main()
Dim Adresse_port
Dim valeur

Adresse_port = &H378

'Pour Lire
msgbox Inp(Adresse_port)
end sub
----------------------------------------------------------------------

Il a très bien fonctionné jusqu’à ce que je supprime la dll INPOUT32.dll. J’ai relancé mon programme depuis l’éditeur, il m’a dit qu’il ne trouvé pas la dll (jusque là, normal).

Ensuite j’ai remis la dll à sa place (« C:\WINDOWS\system32\ »), j’ai relancé mon éditeur, puis mon programme et là Crash ! Mon éditeur plante et se ferme. Mon programme ne fonctionne plus du tout.

(J’ai fais une manip identique avec Excel en VBA avec le même résultat)

C’est comme si Windows m’interdisait d’utiliser à nouveau la dll… Je ne sais plus quoi faire pour faire à nouveau fonctionner mon programme.

J'ai essayé de redémarrer, de réinstaller mon éditeur, d'enregistrer la dll (regsvr), etc... Rien ne marche.

Des idées ?! Merci.

PS : Le problème est identique à "jacquewed" (Jack) à ce post :
http://www.cppfrance.com/forum/sujet-UTILSATION-INPOUT32-DLL-PORT_713650.aspx

5 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
20 mars 2010 à 15:04
Salut
Cette DLL, vieille de 10 ans, avait été concçue pour Windows 98.
Selon le système d'exploitation que tu utilises maintenant, il est en effet fort probable que la gestion des entrées sorties ne s'opère plus de la même manière.

Je te confirme, en tout cas, que cette DLL ne peut plus fonctionner sous XP SP3.
Alors Vista ou autre Windows 7 : c'est surement pareil.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
1
stephantasy Messages postés 6 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 30 mars 2010
22 mars 2010 à 14:02
Bonjour Jack,

Mon OS est XP Pro, SP 2.

- La DLL provient de n’importe quel site de DLL (je ne sais plus lequel…). C’est moi qui l’ai ajouté.
- La manipulation s’est déroulée sur 5 minutes.
- La DLL supprimée, puis restaurée, est exactement la même.
- Mon éditeur VB est « Program Editor » de GE, pas VB.NET…

A savoir, ce programme fonctionne encore très bien sur la machine virtuelle, sur ce même PC.

Comme je le disais, la DLL c’est moi qui l’ai ajouté (à ce moment là, ça marchait), supprimé (ça marchait plus, normal), puis remise (marchait toujours plus, pas normal !).
0
stephantasy Messages postés 6 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 30 mars 2010
22 mars 2010 à 14:02
Euh... C'est normal ces ’ ??
0
stephantasy Messages postés 6 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 30 mars 2010
23 mars 2010 à 18:29
J’ai tenté d’enregistrer la DLL avec regsvr32 sur ma machine virtuelle (où mon programme fonctionne) et voilà le message que je reçois :

[b]C:\WINDOWS\inpout32.dll was loaded, but the DllRegisterServer entry point was not found.
This fil can not be registered./b

Je fais ensuite la même manipulation sur ma machine hôte (où le programme ne marche plus…) et voilà le message :

[b]C:\WINDOWS\inpout32.dll was loaded, but the DllRegisterServer entry point was not found.
C:\WINDOWS\inpout32.dll does not appear to be a .DLL or .OCX file./b

Et si j’exécute un .exe de ce programme il me dit ceci :

[b]C:\WINDOWS\inpout32.dll was loaded, but the DllRegisterServer entry point was not found.
This fil can not be registered./b

Cela peut-il ouvrir d’autres piste de recherches ? (ou de solutions !? )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
stephantasy Messages postés 6 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 30 mars 2010
23 mars 2010 à 19:48
Re,

Voici un morceau de solution ! Cela n'a pas été sans peine, bien que je reste un peu sur ma faim car le pourquoi du comment m'échappe…

En tout cas, j'ai simplement ajouté ceci à mon programme :

[b]Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Declare Function FreeLibrary Lib "kernel32" Alias "FreeLibrary" (ByVal hLibModule  As Long) As Long/b


Il me suffit d'exécuter le programme un fois, ensuite je peux supprimer ces lignes et cela continu de fonctionner (même après un reboot).

Quant à savoir pourquoi et/ou comment, cela me dépasse…


Code, pour ceux que cela intéresserait :

Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Declare Function FreeLibrary Lib "kernel32" Alias "FreeLibrary" (ByVal hLibModule  As Long) As Long

Sub Main()

Dim Adresse_port As Integer
Dim No_Charge As Long

'Adresse du port parallèle
Adresse_port = &H378

'Chargement de la librairie
No_Charge = LoadLibrary("C:\Documents and Settings\SBarthelemy\Desktop\PP\inpout32.dll")

'On test l'accès à la librairie
x =  Inp(Adresse_port)

'On libère la librairie
Resultat = FreeLibrary (No_Charge)

'Affiche l'état du port parallèle
msgbox Inp(Adresse_port)

End Sub



Et merci à ceux qui se sont penché sur le problème !
0