0

32 ビット アプリケーションから 64 ビット DLL にアクセスしたいと考えています。サード パーティによる独自のロックインにより、32 ビット アプリケーションの適切なポートがありません。2 つの異なるバージョンの 64 ビット dll を作成することは、移植目的全体を無効にする両方のビット数でアプリケーションのほぼ全体を構築する必要がある依存関係を満たすため、実際には実現不可能です。さらに増幅するために、32 ビット アプリケーションから 64 ビット ODBC にアクセスしたいと考えています。

この点に関して、私は2つの独自の解決策に出くわしました

ODBC-ODBC ブリッジ - Easysoft

Openlink ソフトウェア

どちらも適切なソリューションですが、オープンソースまたは社内での実装を探しています

この分野で少し調査した結果、 32 ビット アプリケーションと 64 ビット アプリケーションの間のプロセス間通信で説明されているように、dll を別のプロセスとしてロードし、IPC を使用して通信できれば可能であると確信しました。ここでの課題は、通常、参照データ型が含まれる場合のデータのマーシャリングとアンマーシャリングです。

この点で、私はSOの答えに出くわしました32ビットアプリケーションから64ビットdllにアクセスすることは可能ですか? Code Centralのソリューションにリンクしています。これは Delphi ソリューションであり、Visual C++ についても熟読したい同様のソリューションです。

この問題に対処しようとするオープンソースの実装はありますか?

4

1 に答える 1

0

32 ビット アプリケーションから 64 ビット DLL にアクセスしたり、64 ビット アプリケーションから 32 ビット DLL にアクセスしたりすることはできません。これは、プロセッサがそのようなモードを切り替える方法がないためです。64 ビット OS が 32 ビット アプリケーションを実行している場合、プロセッサは「互換モード」にあり、モードに入るにはモードを変更する必要があります。 DLL。モードの切り替えは技術的には可能ですが、「32 ビット アプリが 1 つのレジスタで 64 ビットの値を受け取るとどうなるか」など、他にも多くの問題があります。

Delphi モデルでの解決策は、64 ビットの別のアプリケーションを起動することです。これは DLL 自体の薄いシムです。ソース コードをダウンロードして確認したことはありませんが、説明によると、そのように聞こえます。 64 ビット プロセスで関数を呼び出し、IPC を介して結果を 32 ビット プロセスに返す IPC。これは確かにどの言語にとってももっともらしい解決策です。ただし、追加の IPC ステージが必要です (もちろん、マーシャリングの問題が伴います - データベースは結果をテキストとして提供する傾向があるため、その点ではかなりうまく処理できる可能性があります)。データの二重コピーによるアプリケーション。

アプリケーションを 64 ビット アプリケーションとしてコンパイルする努力が無駄であるとは、私はまったく確信していません。また、64 ビット アプリケーションは、追加のレジスタを使用できるため、32 ビットの同じアプリケーションよりも少し速く実行される傾向があります。

これがあなたが探していた「ここにリンクがあります...」の答えではない場合は申し訳ありません。

于 2013-05-11T09:30:53.487 に答える