VB6アプリケーションからImageListを使用すると、Windows 7.0 64ビットでクラッシュする
質問
COMCTL32.OCXのImageListコントロール(" Microsoft Windows Common Controls 5.0(SP2)")を使用してTreeViewsとListViewsのアイコンを提供する古いVB6アプリケーションがあります。
アプリはWindows 7.0 64ビットでも起動しません。 ImageListのあるフォームをロードしようとすると、クラッシュします(実際、アプリはウィンクアウトし、トレースなしで終了します)。
ImageListをフォームから削除すると、問題が解決します。
アイデアはありますか
解決
VB5に付属のCOMCTL32.OCXのすべてのインスタンスをVB6に付属のMSCOMCTL.OCXに置き換えることにより、この問題を解決しました。
Microsoft KB記事 190952 にこれを行うための指示があります。それはほとんどグローバルな検索と置換の操作でした。
他のヒント
バグをマイクロソフトに報告してください。 VB6ランタイムは、64ビットWindows 7ではまだサポートされています。COMCTL32 .ocxはWindows 7ではインストールされませんが、明示的にリストされています Windows 7でサポートされています。
あなたの解決策は問題ありません。 ただし、COMCTL32.OCXはWin64(Vistaまたは7)で正常に動作するはずです。
ちょっとしたアドバイス:
MSCOMCTL.OCXを使用している場合、XP / Vista / 7スタイルのリストビューまたはツリービューに適用できず、アプリは異質に見える可能性があります。マニフェストはMSCOMCTL.OCXコントロールには影響しません。
回避策は、MSCOMCTL.OCXコントロールをサブクラス化することです。これらのコントロールにはまだCOMCTL32.DLLヘッダーが含まれているため、ペイント方法を操作できます。
(コメントとして投稿したいのですが、まだ投稿できません)
データ実行保護(DEP)の問題に直面している可能性があります。 DEPを無効にしてテストします:
bcdedit.exe /set {current} nx AlwaysOff
コマンドラインで上記を入力した後に再起動します。ズボンを下ろしてWindowsを実行するのと同じことを忘れないでください。
編集:上記のコマンドはVistaで機能します。 Windows 7では試していません。
比較的簡単なDEPの調整は、コンピューターのパフォーマンスダイアログ(システムプロパティの[詳細設定]タブ)に移動し、アプリのexeを[DEP]タブの例外のリストに追加します。
ところで、これはserverfault.comに属していません。 :P