web-dev-qa-db-fra.com

Que signifie "Méthode '~' de l'objet '~' a échoué"?

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?

28
Cyberherbalist

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.

15
DJ.

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.

7
M.M

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:

  • CD d'installation d'Office 97 SR0
  • appliquer le correctif SR1
  • appliquer le correctif SR2

mais pas s'il a été installé avec:

  • CD d'installation d'Office 97 SR1
  • appliquer le correctif SR2

Effectuer une désinstallation/réinstallation avec l’installation de SR1 sur les systèmes affectés a résolu le problème.

2
Julien Marodon

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.

2
Brian Leeming

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.

0
Sajjad

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.

0
yttyx