2011-10-19 114 views
3

私はVB6を使用してWindows XP SP3用に開発されたアプリケーションで作業しています。私は現在、Windows 7上で動作するようになっていますが、カスタムOCXファイルの1つに問題が発生しています。問題OCXに含まれるコントロールのインスタンスを含むフォームをロードしようとWindows 7でVB6 OCXを読み込めませんエラー372

場合、次のエラーが生成される:

はy.ocxからコントロール「X」をロードできませんでした。お使いのy.ocxのバージョンが古くなっている可能性があります。アプリケーションに付属しているコントロールのバージョンを使用していることを確認してください。

私はバージョン番号を確認しており、すべて正しいものであり、正しいバージョンを参照しています。 OCXは正常に登録され、予想されるすべてのレジストリエントリが存在します。

DependencyWalkerによる検査で欠落している依存関係はありません。

ソフトウェアはXPの下で正常に動作し、私は問題のあるOCX部分とVB6のグループを(使用してVB6 IDEを介して実行すると、興味深いことにのWindows 7上

を実行するときに、これは(一見)のみの問題ですグループ、およびアプリケーションの起動プロジェクト)、私は問題がありません。 IDE経由でアプリケーションを実行すると、エラーが表示されます。

アプリケーションがこのエラーをスローする原因となる可能性のあるものについては何か考えてください。

Windows 7 ProfessionalとHome Professionalの両方で32ビットのエラーが発生します。

+0

VB6はWindows 7でもサポートされていますか? –

+0

@ジャックスミス - 正式にサポートされていないかもしれないが[VB6 IDEでもWindows 8で動作する](http://vb6zone.blogspot.com/2011/09/vb6-on-windows-8.html) –

+1

登録の問題昇格したコマンドプロンプトからregsvr32.exeを実行します。 64ビットバージョンのWindowsではc:\ windows \ syswow64バージョンを使用します。 –

答えて

0

これはUACの問題と思われます。 turning UAC offを試して、すぐに問題が解決するかどうか確認してください。それがあなたのアプリケーションのために 'run as administrator'および/またはcreate a manifestを使用してすべてをregsiterする必要がある場合。

4

これはほぼ確実にインターフェイスの互換性の問題です。 COMインターフェイスは、メジャー/マイナー/リビジョン番号とは完全に別々にバージョン化されています。

バイナリ互換性を壊し、アプリケーションがコンパイルされたより新しいインターフェイスでライブラリを展開しようとしています。

HKEY_CLASSES_ROOT\CLSID\{class Id GUID}\VERSION 

あなたのプログラムが削除OCX、新しい一組への古い参照を持っている必要がありますし、それを再コンパイルする必要があります。

これらのバージョン番号は、次のようなキーで発見されています。これは、コントロールのインスタンスをすべて削除し、それらを1つずつ追加することも意味します。

これはWindows 7の問題ではないかと思います。

0

OCXに含まれているコントロールのようなサウンドは、一般的な登録エラーではなく読み込み時に問題があります。 xコントロールのコンストラクタを見て、UACなどに同意していないことをしているかどうかを確認します。これをデバッグする方法の1つは、コントロールが初期化される前に何らかのブレークを入れて、Visual Studioからアプリケーションをデバッグすることです(VB6でPDBを作成することを忘れないでください) tを初期化する。

関連する問題