今日のほとんどの時間、VB6 プロジェクトの 1 つに OCX ファイルをロードしようとしています。私が知っている最善の方法でレジストリのCOM登録をチェックしようとしましたが、ファイルでREGSVR32を使用して何度か試みましたが、役に立ちませんでした。コンポーネントをロードしようとしたときに VB6 から取得し続けるのは ([プロジェクト] --> [コンポーネント] の下) 'FilePath\FileName.ocx' をロードできませんでした。他の誰かがこれを以前に見たことがありますか? もしそうなら、それを修正する方法はありますか?
8 に答える
問題を特定するのに役立つヒントをいくつか....
OleView でコントロールを見る
名前を調べます。'Menu' などの予約語の 1 つである場合、vb6 はその名前を読み込めません。(ただし、vb6 では、保存して再ロードするまで、悪い名前のファイルを作成 (および使用) できます)
インターフェースを調べます。機能を説明していますか? ocx が破損しているか、ライセンスがない可能性があります。
ActiveX コントロール テスト コンテナーを使用してロードを試みます... 可能であれば、問題は ocx ではなく VB6 にあります。
これは依存関係の問題である可能性があります。OCXに必要な他のコンポーネントが存在しません。Dependency Walkerは、静的な依存関係を検出します。
最近、同様のエラーを修正しました。この場合、エラーは Visual Basic プロジェクト (.vbp) ファイルにありました。プロジェクト ファイルは、標準化されたビルド マシンの外部で編集されており、ワークステーション固有のパスとコンポーネントのバージョンを含む OCX コンポーネントへの参照が含まれていました。
プロジェクト ファイルをテキスト エディターで編集するか、バージョン管理から作業バージョンを取得できます。
登録を解除して再度登録することも私にとってはうまくいきました。
この構文を使用してこのコンポーネントを登録する必要があることに注意してください。
regsvr32 /i:design olch2x8.ocx
コントロールは、欠落しているか登録されていない可能性のある別のDLLまたはOCXに依存している可能性があり、これは、使用しようとしているコントロールが欠落していることを報告するVBとして現れる可能性があります。ただし、依存関係をどのように特定するかはわかりません。私の知る限り、依存関係ウォーカーは静的な依存関係を識別します。COMの依存関係を識別できるかどうかはわかりません。
ライセンスは別として、vb6 には他にもいくつかのトリップ ポイントがあります。 特にOCX が VB6 で開発された場合。
その場合、「公式に」システムに登録されたバージョンが、使用している特定の ocx と競合する可能性があります。つまり、どちらも同じ固有名 (またはクラス ID) を持っている可能性がありますが、使用しようとしているものは、システムに登録されているもので説明されているすべての機能を実装していない可能性があります (つまり、進化していないバージョンを使用している)。これは、作成者がコントロールの機能を強化しながらバイナリ互換性を維持したい場合に発生します。パブリック インターフェイスに互換性がある限り、vb はクラス ID を再計算しません。
これは、特定のコントロールを強制的に登録解除することで修正できます (実際には、コントロールのすべてのインスタンスを登録解除します)。(regsvr32 /u control.ocx ) 次に、使用するものを再登録します。これを行うときは、実行中の VB6 のインスタンスが存在しないことを確認してください。そうしないと、結果が機能しない可能性があります。(タスクリストを確認してください)
それが役立つことを願っています...