2012-05-30 168 views
3

操作系統是Windows XP 64位。如何從64位窗口下運行的32位應用程序訪問64位DLL?

該應用程序是Microsoft Office 32位,在其上運行我的應用程序(辦公室插件)。

該DLL是一個64位的Adobe Acrobat「IFilter」dll,它允許訪問.pdf文件的內容。

我認爲問題的解決方案是找到32位版本的IFilter DLL,但由於操作系統是Windows XP 64位,唯一版本將正確註冊是64位版本。

將我的.NET項目的目標平臺設置爲x86,64位或「任何CPU」都不能解決問題。

只有當我從控制檯應用程序中調用它時,64位IFilter才能正常工作,但是一旦它從辦公室加載項的上下文中調用,它就什麼也不做。

解決此問題的最佳方法是什麼?我是否應該將64位dll加載到新進程中,並讓辦公室加載項使用遠程進行通信?

另外,對於那些熟悉IFilter的人員,是否可以將32位版本的IFilter與Office加載項一起部署,然後直接訪問它,而無需在註冊表中搜索正確安裝的IFilter? (我無法做到)

回答

1

您需要將Thunk添加到DLL中。這是否可能在WOW64中我不確定。當然,它可以在NT的早期版本的WOW32上使用。

該理論只是簡單地導致程序代碼中的一箇中斷 - 這將轉換到加載DLL的32位地址空間。

這聽起來像一個有趣的項目。

但是,對於更快的解決方案,我會使用你所說的 - 在64位進程中託管dll,並使用你喜歡的任何IPC進行通信(親自WCF命名管道非常簡單,或者如果使用內存映射文件數據tx是高音量。

+0

hehe。thunk。我覺得它很有趣,因爲thunk是你聽到的東西后聽到的聲音。 –

相關問題