Help... Help... run-time error 13 type mismatch -Lireini

Signaler
Messages postés
15
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
29 janvier 2007
-
Messages postés
15
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
29 janvier 2007
-
J'utilise la fonction Lireini ci-dessous pour récupérer les valeurs de mon fichier ini.

Sur mon système, cela fonctionne très bien.
Je l'ai mis en place sur un autre Pc (Windows 2000 server). Au début c'était ok, mais après avoir installé des applis.
Mon programme ne fonctionne plus.
Lors du lancement j'obtiens le message :

run-time error 13 type mismatch

' Declarations pour lire et ecrire dans un fichier ini
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

' Fonction permettant de lire dans un fichier ini
' Pour l'executer ex :
' LireINI("MonEntete", "MaVariable")

Function LireINI(Entete As String, Variable As String) As String
Dim Retour As String
Dim Fichier
Dim fsotestfic As FileSystemObject
Fichier = App.Path & "" & App.EXEName & ".ini"
Set fsotestfic = CreateObject("Scripting.FileSystemObject")
If fsotestfic.FileExists(Fichier) = False Then
LireINI = "erreur1"
GoTo sortie
End If
Retour = String(255, Chr(0))
LireINI = Left$(Retour, GetPrivateProfileString(Entete, ByVal Variable, "", Retour, Len(Retour), Fichier))
sortie:
End Function

@Lamap

10 réponses

Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

A quel endroit t'as une erreur ?
Messages postés
15
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
29 janvier 2007

L'erreur vient au moment de l'exécution de la fonction Lireini

par exemple :

dim Dernierlancement
Dernierlancement = LireINI("Histo", "Dernierlancement")

@Lamap
Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
10
Bonjour
et avec : Dim Dernierlancement As String ?
Messages postés
15
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
29 janvier 2007

Ok oublie message précédent
j'ai bien dans mon prog :

Dim Dernierlancement As String

Le plus curieux est que cela a eu fonctionné.

@Lamap
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

Pas mieux, le compte est bon ?
Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
10
Je viens de tester :
ça marche très bien après avoir supprimé la ligne

Dim fsotestfic As FileSystemObject
Messages postés
15
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
29 janvier 2007

Merci.

Sans cette ligne cela fonctionne.

Mais cela veut dire que j'ai un problème pour utilser le "FileSystem Object".
Et là, c'est un gros problème.

D'où est ce que cela peut venir ?, dll, ocx... ???

Le problème est seulement sur ce micro.

@Lamap
Messages postés
437
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
10 août 2010
1
C'est ta librairie Windows Scripting (sccrun.dll) qui a été changé après l'installation de logiciels/service pack sur ton serveur 2000.

Pour t'affranchir de ce genre de problèmen supprime ta référence à Microsoft Scripting Runtime.
Ton code devient

NB : En fait tu créais dynamique l'objet FileSystemObject par rapport à celui du serveur, mais tu voulais le stocker dans un FileSystemObject de version différente.

Function LireINI(Entete As String, Variable As String) As String
Dim Retour As String
Dim Fichier
Dim fsotestfic As Object
Fichier = App.Path & "" & App.EXEName & ".ini"
Set fsotestfic = CreateObject("Scripting.FileSystemObject")
If fsotestfic.FileExists(Fichier) = False Then
LireINI = "erreur1"
GoTo sortie
End If
Retour = String(255, Chr(0))
LireINI = Left$(Retour, GetPrivateProfileString(Entete, ByVal Variable, "", Retour, Len(Retour), Fichier))
sortie:
End Function
Messages postés
1858
Date d'inscription
samedi 29 juin 2002
Statut
Membre
Dernière intervention
17 octobre 2013
10
Le code d'origine marche aussi très bien si on ajoute aux références du projet "Microsoft Scripting Runtime", référence à scrrun.dll qui, suivant l'OS est dans \system ou \system32
Messages postés
15
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
29 janvier 2007

J'ai récupéré le fichier scrrun.dll se trouvant dans le dernier service pack de Windows et l'ai copié dans c:\winnt\system32.

Maintenant c'est ok.

Je pense que c'est une mise à jour sécurité de Windows qui est à l'origine du problème.

Un grand merci à tous pour votre participation et votre aide.

Et en plus, on apprend !

@Lamap