none
64bit用Dllの作成 RRS feed

  • 質問

  • 元々使用しているバイナリファイル読込用のDllを
    変更して64bit OS用のDllを作成しようとしています。

    構成プロパティの「プラットフォーム」や「対象コンピュータ」等を64bit環境に合わせて変更し
    64bit OS内でこのDllを作成した場合はうまく動作するのですが
    同じ物を32bit OSで作成すると実行時に

    「間違ったフォーマットのプログラムを読み込もうとしました。 (HRESULT からの例外: 0x8007000B)」
    というエラーメッセージが表示されます。

    何か設定が足りないのかそもそも32bit OS で作成する事ができないものなのかが
    わかりません。

    宜しくお願いします。
    2009年10月14日 6:31

回答

  • DLL/EXEの作成は、どちらの(32でも64でも)OSでも可能です。
    実行は当然ながら64bitOS向けDLLを32bitOS実行できません。逆は可能ですけど。
    2009年10月14日 6:59
  • 実行は当然ながら64bitOS向けDLLを32bitOS実行できません。逆は可能ですけど。

    おそらく、ふるかわあきひとさんはわかっていらっしゃると思いますが、これでは誤解を与えそうな。

    DLL を、“実行する”ことは、出来ません。実行可能ファイルから DLL ファイルを読み込むことはできます。

    64ビット OS 上では、64ビットの実行ファイルも、32ビットの実行ファイルも、実行することが出来ます。

    実行ファイルは、その実行ファイルと同じ CPU をターゲットにした DLL のみを読み込めます。32ビットの実行ファイルは32ビットの DLL のみ、読み込み可能です。64ビットの実行ファイルは64ビットの DLL のみ、読み込み可能です。


    今書かれている事からは、64ビット OS 上で、64ビット実行ファイルから32ビット DLL を読み込もうとしていると思われます。こんな状況とか→[C#] 64bit OSの罠(itsuha.net)


    Jitta@わんくま同盟
    2009年10月15日 14:30
  • 最初の質問に、32bit OSでビルドされたDLLを64bit OSにコピーする旨が書かれていません。書かない限り回答者に伝わらないことは理解されていますよね?

    1つ確認ですがスタートメニューに「Visual Studio 2008 x64 Win64 コマンド プロンプト」は登録されていますか?
    その項目がない場合「X64コンパイラおよびツール」がインストールされてなく、ビルドできない可能性があります。
    インストールしていないとビルド時にエラーにならずにx86向けモジュールが作成されるのかどうか、というところまでは確認していません。
    2009年10月14日 12:06
  • 私はXP(x86)&VS2008で、プラットフォームx64でビルド・作成したDLLを、XP(x64)上で問題なく動かせています。

    64ビットOS上で、成功できていることから、x64用の開発環境についてはできているのだと思いますが、
    試験されているのは、どのOSなのか、32ビットの開発環境のOSもなんなのか?
    VCのバージョンは?使用している言語は?
    EXE,DLLのどちらもプロジェクトやライブラリの種類?
    などなど
    情報をあげてみてはどうでしょうか?

    それと
    「0x8007000B」というキーワードでネット検索すると、かなりいろいろ出ます。
    qpalzmさんのおかれている状況についての情報が不足しているので
    価値がある情報がでてくるかわからりませんが、試してみてはどうでしょうか?
    2009年10月14日 13:58

すべての返信

  • DLL/EXEの作成は、どちらの(32でも64でも)OSでも可能です。
    実行は当然ながら64bitOS向けDLLを32bitOS実行できません。逆は可能ですけど。
    2009年10月14日 6:59
  • 返信ありがとうございます。

    DLL/EXEの作成は、どちらの(32でも64でも)OSでも可能です。
    実行は当然ながら64bitOS向けDLLを32bitOS実行できません。逆は可能ですけど。



    32bit OSで「プラットフォーム」、「対象コンピュータ」はx64に設定しDLLは
    作成されるのですが64bit環境で実行エラーになるのは当然なのですか?

    同じ設定のものを64bit OSにコピーして作成したDLLは何故動作するのかが
    わかりません・・・


    2009年10月14日 7:10
  • 最初の質問に、32bit OSでビルドされたDLLを64bit OSにコピーする旨が書かれていません。書かない限り回答者に伝わらないことは理解されていますよね?

    1つ確認ですがスタートメニューに「Visual Studio 2008 x64 Win64 コマンド プロンプト」は登録されていますか?
    その項目がない場合「X64コンパイラおよびツール」がインストールされてなく、ビルドできない可能性があります。
    インストールしていないとビルド時にエラーにならずにx86向けモジュールが作成されるのかどうか、というところまでは確認していません。
    2009年10月14日 12:06
  • 私はXP(x86)&VS2008で、プラットフォームx64でビルド・作成したDLLを、XP(x64)上で問題なく動かせています。

    64ビットOS上で、成功できていることから、x64用の開発環境についてはできているのだと思いますが、
    試験されているのは、どのOSなのか、32ビットの開発環境のOSもなんなのか?
    VCのバージョンは?使用している言語は?
    EXE,DLLのどちらもプロジェクトやライブラリの種類?
    などなど
    情報をあげてみてはどうでしょうか?

    それと
    「0x8007000B」というキーワードでネット検索すると、かなりいろいろ出ます。
    qpalzmさんのおかれている状況についての情報が不足しているので
    価値がある情報がでてくるかわからりませんが、試してみてはどうでしょうか?
    2009年10月14日 13:58
  • 実行は当然ながら64bitOS向けDLLを32bitOS実行できません。逆は可能ですけど。

    おそらく、ふるかわあきひとさんはわかっていらっしゃると思いますが、これでは誤解を与えそうな。

    DLL を、“実行する”ことは、出来ません。実行可能ファイルから DLL ファイルを読み込むことはできます。

    64ビット OS 上では、64ビットの実行ファイルも、32ビットの実行ファイルも、実行することが出来ます。

    実行ファイルは、その実行ファイルと同じ CPU をターゲットにした DLL のみを読み込めます。32ビットの実行ファイルは32ビットの DLL のみ、読み込み可能です。64ビットの実行ファイルは64ビットの DLL のみ、読み込み可能です。


    今書かれている事からは、64ビット OS 上で、64ビット実行ファイルから32ビット DLL を読み込もうとしていると思われます。こんな状況とか→[C#] 64bit OSの罠(itsuha.net)


    Jitta@わんくま同盟
    2009年10月15日 14:30
  • こんにちは、フォーラムオペレーターの高橋春樹です。

    ふるかわあきひとさん、佐祐理さん、yominetさん、Jittaさん、
    アドバイス、ありがとうございました。

    qpalzmさん、はじめまして。
    MSDNフォーラムのご利用ありがとうございます。

    皆様からアドバイスを頂いたと思うのですが、如何でしょうか?問題解決に繋がりましたか?
    エラー番号からして、Jittaさんからご紹介のあったサイトに書かれている問題と同じかもしれませんね。
    確認して頂ければと思います。

    今回、ふるかわあきひとさん、佐祐理さん、yominetさん、Jittaさんからの投稿が
    MSDNフォーラムを見ている方にとっても有用な情報だと思いましたので、勝手ながら、回答マークを付けさせてもらいました。
    もし不適切と思いましたら、回答マークを削除することも可能です。

    今後ともMSDNフォーラムをよろしくお願いします(^_^)


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    2009年10月29日 5:25