2

Symantec Endpoint Protection がインストールされ、ネットワーク ドライブがマップされている Win64 システムで gtkD を使用して作成した 32 ビット アプリを実行し、ファイル ダイアログを表示しようとすると、ランタイムの何かが SnacNp64.dll、64 ビットをロードしようとするようです。 DLL、32 ビット アドレス空間に。この DLL はネットワーク関連に使用される Symantec Endpoint Protection のコンポーネントであるため、このエラーは非常に限られた状況でのみ発生します。

Win64 ネイティブ コンソールからプログラムを実行し、ファイル ダイアログを読み込もうとすると、次のようになります。

イメージ ファイル C:\Program Files (x86)\Symantec\Symantec Endpoint Protection\SnacNp64.dll は有効ですが、現在のマシン以外のマシン タイプ用です。[OK] を選択して続行するか、[キャンセル] を選択して DLL のロードを失敗させます。

キャンセルを選択すると、すべて正常に動作し、プログラムは DLL の読み込みに失敗しても悪影響を受けないようです。[OK] を選択すると、おそらく gtkD が 64 ビット DLL を 32 ビット プログラムにロードしようとするため、アクセス違反が発生します。

ただし、ネイティブの Win64 ターミナルではなく Cygwin ターミナルから実行すると、Cygwin コンソールがエラーをキャッチして DLL を強制的にロードし、アプリケーションがクラッシュするようです。

このエラーは、同じマシン上の GIMP などの他の 32 ビット GTK ベースのアプリでは発生しないようです。

基本的に、どのような状況でも 32 ビット アプリが 64 ビット DLL を読み込もうとしないようにするにはどうすればよいでしょうか?

4

0 に答える 0