デスクトップでレガシーVB6アプリケーションを実行しようとしています(ユーザーインターフェイスがなく、コマンドラインアプリです)。実行すると、次のメッセージボックスが表示されます。
Run-time error '4099':
Method '~' of object '~' failed
これは私には何の意味もありません。誰が何が間違っているのか知っていますか?
これは、サポートライブラリ(dllまたはocx)が正しく登録されていない場合、またはインストールされたライブラリのバージョンが、アプリが最初にコンパイルされたバージョンと異なる(および互換性がない)場合に発生します。
すべての依存ライブラリが登録され、適切なバージョンであることを確認してください。
サポートライブラリの新しいバージョンで動作させるには、アプリを再コンパイルする必要があります。
このメッセージは、Visual Basic 6アプリケーションが例外をスローする(つまり、失敗HRESULT
を返す)COMインターフェイス呼び出しを行うときに発生します。この場合、VB6は例外ハンドラーにジャンプします(On Error
)。例外ハンドラーには、例外の詳細を含むオブジェクトErr
が表示されます。
オブジェクトがISupportErrorInfo
を実装し、実際にエラー情報をサポートし、エラー情報を設定した場合、Err.Description
は、オブジェクトによって設定されたエラー情報にある文字列を取ります。さもないと、 Err.Description
は文字列Method ~ of ~ failed
。
IDKは、VBの他のバージョンが同じことをするかどうか、または、メッセージが今説明したシナリオ以外の他のシナリオでも設定されているかどうか。
別の原因として、自動化を使用している場合、Officeのマイナーバージョンの不一致があります。
一部のシステムで正常に動作し、他のシステムでエラーが発生したレガシーVB5 + Accessアプリ(Delphiで書き直し、すべての自動化混乱をクリーンなOpenDocument生成に置き換えている最中)があります。
このエラーは、Excelスプレッドシートを生成するときに発生し、無害なように見えました(迷惑を除いて、ユーザーが中央で[中止]をクリックするリスクが何十倍も表示されるため)。
最終的には、Office 97のインストール方法が原因であることがわかりました。
Office 97セットアップシーケンスが次の場合、エラーが表示されます。
ただし、以下でインストールされた場合はそうではありません。
影響を受けるシステムでSR1セットアップでアンインストール/再インストールを行うと、問題が解決しました。
VB6 SP6があり、この動作を再現できます。新しいプロジェクトでは、このコードをフォームに入れます。プロジェクトはF5で正常に実行されます。プロジェクトを右クリックして、「公開」、「出力の構築」の順に選択します。これにより、エラーメッセージが生成されます。
Option Explicit
Public Sub Init()
Dim blnErrorHandling As Boolean
If False Then
blnErrorHandling = True
Else
blnErrorHandling = False
End Sub
最後の4行をコメントアウトします。
Option Explicit
Public Sub Init()
Dim blnErrorHandling As Boolean
' If False Then
' blnErrorHandling = True
' Else
' blnErrorHandling = False
End Sub
エラーは発生せず、出力は正常に構築されます。私はすぐにいくつかのエラー処理を追加して、クラッシュとIf False Then
は完全に有効です。 MDACチェッカーは、すべてが正常であり、再起動しても問題が解決しないと述べました。
私の経験によると、これはMicrosoft Accessバージョンによるものです。
私のプログラムはMS Office 2007で作成され、MS Officeの新しいバージョンをインストールしました。そのため、このエラーが表示されます。
コマンドラインアプリケーションとして実行されるVB6プログラムの場合、コンパイル後に追加のステージが必要です。VB6リンカーを実行可能ファイルで実行して、コンソールプログラムとして設定する必要があります。
<VB6 dir>\LINK.EXE /EDIT /SUBSYSTEM:CONSOLE <program>.exe
これに失敗すると、Method '~' of object '~' failed
プログラム実行時のエラー。