J'essaie d'exécuter une application VB6 héritée sur mon bureau (elle ne possède pas d'interface utilisateur, c'est une application en ligne de commande), et lorsque je le fais, je reçois une boîte de message disant
Run-time error '4099':
Method '~' of object '~' failed
Cela ne signifie rien pour moi. quelqu'un a-t-il une idée de ce qui ne va pas?
Cela peut arriver lorsque les bibliothèques de support (dll ou ocx) ne sont pas correctement enregistrées ou que les versions des bibliothèques installées sont différentes (et incompatibles) avec la version à l'origine de la compilation de l'application.
Assurez-vous que toutes les bibliothèques dépendantes sont enregistrées et la version appropriée.
Vous devrez peut-être recompiler l'application pour la faire fonctionner avec les versions les plus récentes des bibliothèques de support.
Ce message se produit lorsqu'une application Visual Basic 6 effectue un appel à l'interface COM qui lève une exception (c'est-à-dire renvoie un échec HRESULT
). Dans ce cas, VB6 passe à un gestionnaire d'exceptions (défini par On Error
). Dans le gestionnaire d'exceptions, il y a un objet Err
qui contient les détails de l'exception.
Si l'objet implémente ISupportErrorInfo
et qu'il prend effectivement en charge les informations d'erreur et qu'il a défini les informations d'erreur, alors Err.Description
prend la chaîne qui figure dans les informations d'erreur définies par l'objet. Sinon, Err.Description
prend la chaîne Method ~ of ~ failed
.
IDK si d’autres versions de VB font la même chose; ou si le message est également défini dans d'autres scénarios que celui que je viens de décrire.
Une autre cause peut être l’utilisation de l’automatisation, une incompatibilité de version mineure d’Office:
J'ai une application héritée VB5 + Access (que je suis en train de réécrire dans Delphi et qui remplace tout le désordre de l'automatisation avec une génération OpenDocument propre) qui fonctionnait bien sur certains systèmes et donnait l'erreur sur d'autres.
Cette erreur se produisait lors de la génération d'une feuille de calcul Excel et semblait inoffensive (sauf le désagrément et le risque qu'un utilisateur clique sur "Abort" au milieu), comme si elle cliquait toujours sur "Ignorer" tout fonctionnait comme prévu.
J'ai finalement trouvé que la cause était la manière dont Office 97 avait été installé:
L'erreur s'afficherait si la séquence d'installation d'Office 97 était la suivante:
mais pas s'il a été installé avec:
Effectuer une désinstallation/réinstallation avec l’installation de SR1 sur les systèmes affectés a résolu le problème.
J'ai VB6 SP6 et je peux reproduire ce problème. Dans un nouveau projet, mettez ce code dans un formulaire. Le projet fonctionne normalement avec F5. Cliquez avec le bouton droit sur le projet et sélectionnez Publier, puis Construire les sorties. Cela génère le message d'erreur.
Option Explicit
Public Sub Init()
Dim blnErrorHandling As Boolean
If False Then
blnErrorHandling = True
Else
blnErrorHandling = False
End Sub
Maintenant commentez les quatre dernières lignes:
Option Explicit
Public Sub Init()
Dim blnErrorHandling As Boolean
' If False Then
' blnErrorHandling = True
' Else
' blnErrorHandling = False
End Sub
Vous n'obtenez plus l'erreur et les sorties sont construites normalement. J'y ai rapidement ajouté une gestion des erreurs pour localiser la source d'un crash et If False Then
est parfaitement valide. Le vérificateur MDAC a déclaré que tout allait bien et qu'un redémarrage n'a pas résolu le problème.
Selon mon expérience, cela est dû à la version Microsoft Access.
Mon programme a été créé dans MS Office 2007 et a installé une version plus récente de MS Office. C'est pourquoi cette erreur apparaît.
Pour un programme VB6 exécuté en tant qu'application en ligne de commande, une étape supplémentaire est nécessaire après la compilation: l'éditeur de liens VB6 doit être exécuté sur l'exécutable pour le définir en tant que programme console:
<VB6 dir>\LINK.EXE /EDIT /SUBSYSTEM:CONSOLE <program>.exe
Si vous ne le faites pas, l'erreur Method '~' of object '~' failed
sera générée lors de l'exécution du programme.