32bitのwindows 7 のプログラムに64bitのdll

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
若葉

32bitのwindows 7 のプログラムに64bitのdll

#1

投稿記事 by 若葉 » 11年前

32bitのMS windows 7 のプログラムを開発しましたが、
これは主に64bitのマシン上で実行します。
なので、将来このプログラムから64bitのdllをも利用したいですが、
直接関係ない32bitのLib, object, dllをそのままで、
ある部分だけ64bitのdllを導入することは可能でしょうか。
(理論上問題ないでしょうか)

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: 32bitのwindows 7 のプログラムに64bitのdll

#2

投稿記事 by YuO » 11年前

プロセスにおいても,リンカのリンク対象においても,x86用コードとx64用コードを混ぜることはできません。
32bitプロセスからx64用DLLを使う場合は,64bitプロセスを用意して,プロセス間通信を行って呼び出す必要があります。

若葉

Re: 32bitのwindows 7 のプログラムに64bitのdll

#3

投稿記事 by 若葉 » 11年前

さっそくご教授本当にありがとうございます。
32bit appから、64bit のDLLをコールするのは無理であっても、
逆の場合はどうでしょう。
すなわち、64bit appから、32bit のDLLをコールすることは
場合によって成功する可能性もあるでしょうか。

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: 32bitのwindows 7 のプログラムに64bitのdll

#4

投稿記事 by YuO » 11年前

若葉 さんが書きました:32bit appから、64bit のDLLをコールするのは無理であっても、
逆の場合はどうでしょう。
すなわち、64bit appから、32bit のDLLをコールすることは
場合によって成功する可能性もあるでしょうか。
ありません。再掲しますが,
YuO さんが書きました:プロセスにおいても,リンカのリンク対象においても,x86用コードとx64用コードを混ぜることはできません。
です。

若葉

Re: 32bitのwindows 7 のプログラムに64bitのdll

#5

投稿記事 by 若葉 » 11年前

お世話になっております。

64bitと32bit静的に混ぜる事ができないのはよくわかりました。
ありがとうございます。

ただ、DLLというものは正に動的なもので、概念的に
実行する時、初めて「リンク」されるのではないでしょうか。
" Dynamic Link Library" ですよね。

という事は、実行する時にDLL call時点でハングアップでしょうか。
実は今は知らない人が作ったプログラムを実行する時に
原因不明にハングアップしてしまっています。
64bitと32bitの DLLが混在しているのではないかと疑っていますが。

また何かヒントいただければ、大変助かります。

Bull
記事: 149
登録日時: 11年前

Re: 32bitのwindows 7 のプログラムに64bitのdll

#6

投稿記事 by Bull » 11年前

実行環境が良くわからないのですが、64bit Windows で 32bit Exe を実行する場合と考えてよろしいですか?

まず、DLL のリンクには明示的リンクと暗黙的リンクがあるのはご存じだと思いますが、32bitのEXEから64bit
のDLLをコールしようとした場合、明示的リンクでは、LoadLibrary() でエラーになりますし、暗黙的リンクでは
プログラムの開始時にエラーになると思います。どちらもハングアップすることはないはずです。

プログラムがハングアップするのは別の原因ではないのですか?

Bull
記事: 149
登録日時: 11年前

Re: 32bitのwindows 7 のプログラムに64bitのdll

#7

投稿記事 by Bull » 11年前

ちょっと書き漏らしました。

暗黙的リンクならば Dependency Walker を使用してリンクしている DLL は特定できます。
明示的リンクでも、ある程度は調査できます。

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: 32bitのwindows 7 のプログラムに64bitのdll

#8

投稿記事 by YuO » 11年前

若葉 さんが書きました:64bitと32bit静的に混ぜる事ができないのはよくわかりました。
動的でも無理です。

もう一度再掲しますが,
YuO さんが書きました:プロセスにおいても,リンカのリンク対象においても,x86用コードとx64用コードを混ぜることはできません。
です。
「プロセスにおいても」をちゃんと理解していますか。
これは実行時の話をしています。

32bitプロセスとして起動したプロセス空間内に,x64用のDLLを実行可能な状態で読み込むことはできませんし,
64bitプロセスとして起動したプロセス空間内に,x86用のDLLを実行可能な状態で読み込むこともできません。
若葉 さんが書きました:実は今は知らない人が作ったプログラムを実行する時に
原因不明にハングアップしてしまっています。
64bitと32bitの DLLが混在しているのではないかと疑っていますが。
                                                                             
プログラムを自分で作ったのではないのですね (元々の質問の前提条件は,自分で開発したプログラムについてでしたが)。

混在を疑っている理由は何ですか。
例えば,Windows SysinternalsProcess Explorerで読み込んでいるDLLを見たら混在していた,のような場合であれば,正統な理由だと思います。
また,Windowsのアプリケーションログに記録されたファイル名などから疑うこともあるでしょう。
ただ,WindowsがOSレベルでできないようにしているとされていることを,単純に自身の直感だけで疑うのは無意味だと思います。

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: 32bitのwindows 7 のプログラムに64bitのdll

#9

投稿記事 by YuO » 11年前

一応,MSDNへのリンク
Process Interoperability
オフトピック
32bit/64bitの混在不可はMSの開発者向イベントで何度も聞いた話なので完全に「前提条件」扱いしていましたが,探したら当然ですがちゃんとMSDNに書いてありました。

閉鎖

“C言語何でも質問掲示板” へ戻る