こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

締切り済みの質問

64ビットアプリから32ビットDLLを使う手段

こんばんは。
ソフトの保守を請け負いまして、32ビットのアプリケーションを64ビットにするというものです。
実行ファイルの部分は64ビット化できたのですが32ビットDLLでソースコードがないのがあり
困っています。
64ビットアプリケーションから32ビットDLLを使うための手段があるとするならば、
どのような手段が考えられるのでしょうか。

投稿日時 - 2015-12-04 19:06:36

QNo.9090661

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.2

OSを書いていませんが、おそらくWindowsの話だという前提で回答します。

いきなり話の腰を折ってしまうかもしれませんが、依頼されているのは
本当に「32ビットのアプリケーションを64ビットにする」
ということなのでしょうか?

もしかしてそうじゃなくて、
「64ビットWindows上で32ビットアプリを動かせるようにする」
ということが求められているんじゃないでしょうか?

もしそうだったら、実行ファイルを64ビットにする必要は
ありません。これまで通り32ビットアプリを作って32ビットDLLを
呼び出せばよいです。Windowsであれば、64ビットWindows上で
32ビットアプリを動かすことができます。

でも、現実にそれが動いてないんだったら、
32ビットOSと64ビットOSの微妙な環境の違いによる
不具合が発生しているのだと思います。
例えば、32ビットWindows上で32ビットアプリは
「C:\Program Files」に格納されていますが、
64ビットWindows上で32ビットアプリは
「C:\Program Files (x86)」に格納されています。

あなたに求められているのは、現実に動いていない原因を調査し、
環境の違いを調整して、従来の32ビットアプリを64ビットWindows上で
動かせるようにすることなんじゃないでしょうか?

32ビットアプリを64ビットアプリに変更するメリットなんて
メモリ空間が広がるくらいしかありませんから、新規開発
でもないのに従来動いていたものを保守段階で64ビットアプリ
にする必要なんて普通はありません。
そのあたりを依頼元によく確認してみることをお勧めします。


で、本当に64ビットアプリを作ることが要件で、呼び出している
DLLが32ビットしかないなら、無理やりやるしかないです。
この場合、64ビットアプリが32ビットDLLを呼び出すことはできませんが、
64ビットアプリが32ビットアプリを呼び出すことはできます。

なので、その32ビットDLLを呼びだすだけの中継用32ビットアプリを
新しく作り、64ビットアプリから32ビットアプリを呼び出して、
そこから32ビットDLLを呼び出せばなんとかできます。
それを汎用的にやる仕組みとしてRPCというのがあります。
が、そんなに簡単にできるものではありません。

投稿日時 - 2015-12-05 12:37:26

お礼

早々のレスをありがとうございます。
土日出張が入っていまして返答が遅れました。
テンパっていまして環境を書くのを忘れていました。大変失礼しました。
OSはWindows7、64bitです。
開発環境はVisualStudio2015(元のプロジェクトは2008)、処理系はC++です。
64ビットアプリとするのは単純に以下の理由だそうです。

・データが1GB超えそうなので64ビット化しておきたい。
・営業ウケがいい。

私からは提案は幾つかしましたが64ビットアプリとしてビルドして欲しいのことです。
DLL側のソースがないのは先方も理解しているので「しのぎなのでそこをなんとか」と言われ質問させていただきました。

提案していただきましたRPCを調べてみたいと思います。

投稿日時 - 2015-12-07 09:59:03

ANo.1

32ビットDLLの機能を提供する32ビットアプリケーションを作って、本体の64ビットアプリケーションとはRPC(Remote Procedure Call)でやりとりするくらいじゃないでしょうか。

投稿日時 - 2015-12-04 20:58:00

お礼

早々のレスをありがとうございます。
提案していただきましたRPCを調べてみたいと思います。

環境を書き忘れていたにも関わらず返答していただきありがとうございました。

投稿日時 - 2015-12-07 10:01:04

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-