簡體   English   中英

是否可以從32位應用程序訪問64位DLL?

[英]Is it possible to access a 64-bit dll from a 32-bit application?

我有一個類似於Taskbar Shuffle的Delphi應用程序,它包含一個hook dll。

編輯 :此掛鈎DLL通過發送Windows消息與主應用程序通信。

我想添加對XP和Vista x64的支持,我最初的想法是將dll轉換為64位(用FreePascal編譯它)但是現在將應用程序保持為32位(Delphi)。

32位應用程序是否可以訪問64位dll?

EDIT2 :我正在通過LoadLibrary加載DLL,所以我想我已經卡住了,因為32位進程無法加載64位dll,根據我在Lars Truijens指出的鏈接上讀到的內容以下答案。

只要64位DLL由一個單獨的64位進程加載,並且32位進程和64位DLL之間的所有通信都是通過操作系統可以編組的松散耦合的類似IPC的機制,那么是的你可以做到這一點。

我做了類似的事情。 32位應用程序需要在DLL中實現自定義Print Spooler加載項。 應用程序和假脫機程序加載項通過IPC機制進行通信(在這種情況下,這是一種說明臨時文件的奇特方式)。

在64位系統上,32位應用程序的一切工作正常,但Print Spooler拒絕加載外接程序DLL,因為Print Spooler當然是一個64位進程。

解決方案就像在64位中僅重建Spooler加載項一樣簡單。 無需更改整個32位應用程序。

不需要。您必須編譯兩個版本:64位和32位。

我剛從CodeCentral找到了這個解決方案: http ://cc.embarcadero.com/Author/802978

它允許從32位代碼調用任何64位庫。

這是一個復雜的解決方案,在后台運行asm編寫的64位可執行文件,然后使用內存映射文件和Windows GDI消息與它進行通信,從32位Delphi進程啟動一些64位函數。

有一個示例能夠加載任何64位庫,然后從32位可執行文件調用此庫的任何函數。

似乎運作良好。 在所有情況下,代碼都值得一看:它是技術性的,但設計得很好!

不,但你可以使用COM解決這個問題。 如果在作為獨立進程運行的COM對象中運行dll,並與可編組接口(例如:自動化兼容接口)進行通信,則它應該可以工作。 它並不總是可行的,具體取決於dll的作用以及集成和調用表面的廣泛程度,但它是一個應該能夠使該場景成為可能的選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM