none
Windows7以降自作.dllファイルが読めない RRS feed

  • 質問

  • VB2008。Declare文で自作の.DLLファイル(実際には他人の作ったファイル。ファイルとのやり取りを指示された通りやっているだけ。ファイルはC言語で作らている。作者と事情があって音通できない。)そのDeclare文の所に来るとSystem.BadImageFormatExceptionが出ます。WindowsVistaでは何ともなく動作する。またVB6では実行形式にするとWindows7でも8でも問題なく動く。VB2008を7や8でデバッグモードで動かすとそのDeclare文でエラーとなる。(Vistaはその文も問題なく通る。)何かWindows7以降には特殊な措置がいるようであちことち調べていますがどなたか知識があれば教えて頂けないでしょうか。

    2014年8月2日 8:32

回答

  • すでに指摘されていますが、今回のケースは「Windows 7 だから」ではなく、「64bit OS だから」ではないでしょうか。

    VB6 で作った場合、必ず 32bit アプリケションになります。
    VB.NET 2008 で作った場合、Any CPU と呼ばれ、32bit OS では 32bit アプリケーションとして、64bit OS では 64bit アプリケーションで動く設定がデフォルトになっています。x86 を指定すると必ず 32bit アプリケションになります。

    64bit アプリケーションでは 64bit 向けに作られた DLL しか読み込めません。逆に、32bit アプリケーションでは 32bit 向けに作られた DLL しか読み込めません。逆の組み合わせを試みると、BadImageFormatException が発生します。
    これらのことから、toyorireki さんのケースでは、32bit DLL を Any CPU のアプリケーションで読み込むように作ってしまい、64bit OS で失敗するという事象だと予想されます。

    解決策はすでに助言のあるとおり、プロジェクトのプロパティのビルドの詳細設定あたりからターゲット CPU を x86 にしてください。

    • 回答としてマーク 星 睦美 2014年8月4日 0:13
    2014年8月2日 14:59
    モデレータ
  • BadImageFormatException クラス

    の解説にあるようにプラットフォームターゲットをx86に変更するのはすでに試しましたか?

    • 回答としてマーク 星 睦美 2014年8月4日 0:13
    2014年8月2日 9:59

すべての返信

  • BadImageFormatException クラス

    の解説にあるようにプラットフォームターゲットをx86に変更するのはすでに試しましたか?

    • 回答としてマーク 星 睦美 2014年8月4日 0:13
    2014年8月2日 9:59
  • すでに指摘されていますが、今回のケースは「Windows 7 だから」ではなく、「64bit OS だから」ではないでしょうか。

    VB6 で作った場合、必ず 32bit アプリケションになります。
    VB.NET 2008 で作った場合、Any CPU と呼ばれ、32bit OS では 32bit アプリケーションとして、64bit OS では 64bit アプリケーションで動く設定がデフォルトになっています。x86 を指定すると必ず 32bit アプリケションになります。

    64bit アプリケーションでは 64bit 向けに作られた DLL しか読み込めません。逆に、32bit アプリケーションでは 32bit 向けに作られた DLL しか読み込めません。逆の組み合わせを試みると、BadImageFormatException が発生します。
    これらのことから、toyorireki さんのケースでは、32bit DLL を Any CPU のアプリケーションで読み込むように作ってしまい、64bit OS で失敗するという事象だと予想されます。

    解決策はすでに助言のあるとおり、プロジェクトのプロパティのビルドの詳細設定あたりからターゲット CPU を x86 にしてください。

    • 回答としてマーク 星 睦美 2014年8月4日 0:13
    2014年8月2日 14:59
    モデレータ
  • Azulean様、解決しました。誠に有難うございました。

    2014年8月3日 1:47