• 締切済み

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

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

みんなの回答

回答No.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というのがあります。 が、そんなに簡単にできるものではありません。

TeijigoTeatime
質問者

お礼

早々のレスをありがとうございます。 土日出張が入っていまして返答が遅れました。 テンパっていまして環境を書くのを忘れていました。大変失礼しました。 OSはWindows7、64bitです。 開発環境はVisualStudio2015(元のプロジェクトは2008)、処理系はC++です。 64ビットアプリとするのは単純に以下の理由だそうです。 ・データが1GB超えそうなので64ビット化しておきたい。 ・営業ウケがいい。 私からは提案は幾つかしましたが64ビットアプリとしてビルドして欲しいのことです。 DLL側のソースがないのは先方も理解しているので「しのぎなのでそこをなんとか」と言われ質問させていただきました。 提案していただきましたRPCを調べてみたいと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.1

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

TeijigoTeatime
質問者

お礼

早々のレスをありがとうございます。 提案していただきましたRPCを調べてみたいと思います。 環境を書き忘れていたにも関わらず返答していただきありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 「DLLがありません」て?

    DLLが足りてるかどうか、チェックするソフトはあるのでしょうか? その都度足しているのですが、何度も言われると 「最初から一度で言って!」 となってしまうので(^_^;) それとも、アプリケーションが実行されるまで、 どんなDLLが足りない(使われているか)不明なのでしょうか? よろしくお願いします<(_ _)>

  • C++のDLLが見つからないVBAから見つからない

    こんにちは。質問させてください。 Visual C++ 2008 Express Editionで自作DLLを作成しました。 このDLLが、開発環境(WindowsXP、Excel2002)の Excelマクロで呼び出したところ、うまく動いたのですが、 WindowsVista、Excel2007のPCで同じマクロを実行すると 実行時エラー '53' ファイルが見つかりません [ファイル名] というエラーが出て実行できません。 どちらの環境でもDLLファイルはフルパスで指定していて ファイルはちゃんと存在しています。 原因が、Vistaなのか、Excel2007なのか またはその他の要因なのか、わからずに悩んでいます。 どなたか心当たりがある方がいらっしゃいましたらご教授願います。 よろしくお願いします。 その他詳細 ・DLLはdefファイルを使ってEXPORTしました。 ・Vistaのユーザーアカウント制限をoffにしてます。 ・Declear部分のソースコードは Declare Sub Prepare Lib "C:\test\API_test.dll" (ByVal FileName As String)です。

  • CNCS32.DLL

    私はたまにフリーソフトをダウンロードするのですが、実行しようとするとたまに「CNCS32.DLLファイルが見つかりません」というエラーで実行できないことがあります。まず、拡張子が.DLLというファイルはどんなものなんですか?で、このようなケースの場合、このソフトは実行できないんですか?

  • Win98のアプリがXPで実行できない。

    WIN98で使用していたアプリケーションをXPに乗せ変えて実行しようとすると次のような実行エラーがでます。もうこのアプリはXPでは使えないんでしょうか教えてください。 ”○○を実行するのに必要なライブラリファイルの1つがWin32.DLLであるため16ビットWindowaサブシステムにロード出来ません。”

  • unzip32.dllの利用について(64bit)

    unzip32.dllをプログラムから呼び出しZIPファイルを解凍していたのですが、 64bitOSになった場合は、どうすればよいのでしょうか? unzip32.dllの64ビット版はあるのでしょうか? テストで使用しているWindows7(x64)では、動作しているのですが、 ちょっと不安になり質問しました。 よろしくお願いします。

  • DLLの作りかた

    サンプルで配布されたアプリケーションのEXEファイルをDLL化して、自作するアプリケーション上で利用したいと思っています。 DLLってどうやって作成していくのでしょうか? 初心者にとって、この道は険しいでしょうか?

  • user32.dllの交換

    特定のアプリケーションで使用されるuser32.dllをそのアプリケーションだけ独自のものを使用したいのですが、どうしたら良いですか? 実行ファイルと同じ位置に置いても代わりませんし、C:\WINDOWS\system32に配置しても代わりません。

  • dllのロードアドレスについて

    いつもお世話になっております。 現在、アプリケーションのデバッグを行っていて、dllのロードについて不明な点があります。 C++で作成したアプリケーションを起動すると、main関数が呼ばれる前に「アプリケーションが正しく初期化されませんでした(0xc0000005)。」というダイアログボックスが表示され、エラー終了してしまうという現象が発生しています。 但し、このアプリケーションは共通のソースを使用して、条件コンパイルによってGUIの描画部分等が違うといった、複数のアプリを作成することができます。そして、このうちの1つのアプリのみ上記のようなエラーが発生してしまいます。 デバッガによって正常に動くアプリとエラーになるアプリとで、アプリ実行時にロードされるdllの基底アドレスに違いがあるということが分かりました。 ※エラーになる方は、明らかに不正なアドレスにロードされているdllがあります。大抵のdllは0x60000000以降のアドレスですが、0x00300000代にロードされるdllがあります。 そこで、アプリケーションが実行時にロードするdllの基底アドレスが不正になってしまう理由がわかればと思い質問いたしました。 (コンパイル時のリンクオプション等が間違ってしまっているのかと思っています。。。) そもそも、dllがロードされる基底アドレスがどのように決まるものなのかも分からないのですが、どなたか御教授して頂けないでしょうか? 以上、よろしくお願いします。

  • MSVBVM50.DLLが見つからなかったため・・

    あるアプリケーションをWindows Vistaで使用したいのですが、アプリケーションを実行しようとすると、「MSVBVM50.DLLが見つからなかったため、このアプリケーションを開始できませんでした。」などと表示されて、実行できません。 さらに深く調べてみると、「このプログラムには、欠けているWindowsのコンポーネントが必要です」であるとか「この問題は、Windows Vista とこのバージョンの Microsoft Deprecated DLL Components の間での互換性に関する問題が原因で発生しました。」と表示されます。 とりあえず、ランタイムファイルであるMSVBVM50.DLLをどこかで入手すればいいのではないかと思い、以下のフリーウェアをダウンロード後にインストールを試みましたが、正常にインストールされませんでした。 http://www.vector.co.jp/soft/win95/util/se081909.html さらによく調べた結果、もともとWindows Vistaには上位のバージョンであるMSVBVM60.DLLが標準装備されているとのことです。下位のバージョンであるMSVBVM50.DLLとの互換性がないのでしょうか・・? なお、このアプリケーションはもともとWindows XPで動作するように開発されたものらしく、機種や環境による依存性の確認は行われていないとのことです。Windows XPで正常に動作するかはまだ試していないのでうが、とある事情でVistaでもこのアプリケーションを使用しなければならない状況です。 今の状態ですと、Vistaでの使用は無理でしょうか?

  • C#でコンパイルしたクラスを逆コンパイル

    マイクロソフト .NET C#でコンパイルしたクラス(dll)があり、 元の最新のソースコードがなくなってしまったので、 dllから一部復元したいのですが、 dllからソースコードを復元(逆コンパイル)することは可能でしょうか? あるファイルのこの部分だけ、という形でもかまいません。

このQ&Aのポイント
  • 岐阜県の恵那市にある岩村町は、風情のある城下町として知られています。
  • 観光スポットだけでなく、体験もできる場所もありますので、おすすめです。
  • また、お昼ご飯を楽しむには、13時に到着しても楽しめる名店もあります。ただし、坂道の多い場所は避けた方が良いです。
回答を見る

専門家に質問してみよう