3

OSはWindowsXP64ビットです。

アプリケーションはMicrosoftOffice32ビットであり、その上で私のアプリケーション(Officeアドイン)が実行されます。

DLLは64ビットのAdobeAcrobat"IFilter" dllであり、.pdfファイルの内容にアクセスできます。

問題の解決策はIFilterdllの32ビットバージョンを見つけることだと思いましたが、OSはWindows XP 64ビットであるため、正しく登録されるバージョンは64ビットバージョンのみです。

.NETプロジェクトのターゲットプラットフォームをx86、64ビット、または「任意のCPU」に設定しても、問題は解決しません。

64ビットIFilterは、コンソールアプリケーション内から呼び出す場合にのみ正しく機能しますが、Officeアドインのコンテキスト内から呼び出されると、何も実行されません。

この問題を解決するための最良の方法は何ですか?64ビットdllを新しいプロセスにロードし、オフィスアドインがリモート処理を使用してそれと通信する必要がありますか?

また、IFilterに精通している方は、32ビットバージョンのIFilterをOfficeアドインと一緒に展開し、レジストリで適切にインストールされたIFilterを検索せずに直接アクセスすることはできますか?(できませんでした)

4

1 に答える 1

1

DLLにサンクする必要があります。これがWOW64で可能かどうかはわかりません。確かにそれはNTの初期の時代にWOW32で利用可能でした。

理論は、単にプログラムコードに割り込みを発生させることでした。これは、DLLがロードされた32ビットアドレス空間にサンクオーバーします。

面白いプロジェクトのようですね。

ただし、より迅速な解決策として、私はあなたの言うことを使用します-dllを64ビットプロセスでホストし、好きなIPCを使用して通信します(個人的にはWCF名前付きパイプは非常に簡単です、またはデータtxが高い場合はメモリマップファイルを使用できます音量。

于 2012-05-30T00:55:43.483 に答える