2009-03-02 159 views
4

這只是一箇中途編程問題。首先我有一個PCI-Express卡和32/64位驅動程序。目標操作系統必須是Windows 64位系統。我讀過Vista64下的所有驅動程序都必須通過認證的64位驅動程序。這是64位操作系統的一般限制,這是否也適用於「XP 64」或任何Linux系統?在32位程序中使用64位驅動程序。 Windows

因此,爲了簡單起見,假設我在Vista64下使用64位驅動程序用於我的PCIe卡,並使用一堆64位DLL來使用卡功能。另一方面,有一個大型的傳統32位exe程序需要使用PCIe設備。將程序轉換爲64位將是一項非常大的工作。

那麼可以將32位程序和64位驅動程序放在一起呢?我讀過混合32/64位二進制文​​件和DLL是不可能的,但這很難讓我相信。我敢肯定,你可以在32位應用程序內打印Vista64下的文檔,Windows會以某種方式將其包裝到64位打印機驅動程序中。

回答

3

只有在Vista下才需要64位認證;沒有非Windows平臺的認證權威,我不相信XP或Windows Server會檢查認證(不確定,但可能取決於您所在的服務包)。

如果您通過Windows API使用驅動程序,那麼應該沒有任何問題; Windows將在內核中執行32位的32位內存翻譯。如果你試圖在你自己的進程中加載​​驅動程序,那可能是不可能的。正如德克所說,你必須在自己的進程中運行它並通過COM服務器進行通信。我不確定如果您必須以更高特權的執行級別運行您的驅動程序,並且想要從用戶模式撥打電話,您將不得不跳過這些環節。

希望你的64位DLL提供了一個32位的API,或者Windows提供了一個標準的驅動程序接口(如果它是一個普通的I/O設備,如顯示器或網卡)。

+0

我不直接使用驅動程序,而是使用一組DLL。好像這些DLL沒有32位API,所以我需要使用64位EXE,因爲它不是標準設備。 – asdrubael 2009-03-04 10:45:20

1

我認爲驅動程序的重點是抽象出硬件的實際運行情況併爲軟件提供一個通用接口。在這種情況下,PCIe驅動程序必須是64位的,以便它可以充當Windows和硬件的中介,但我認爲32位應用程序可以在沒有任何麻煩的情況下訪問設備。

你讀到的不兼容性是什麼意思是32位和64位程序集不能成爲同一應用程序的一部分 - 應用程序必須針對其中一個或另一個,儘管32位應用程序通常會使用WoW64可以在Windows x64上正常運行,它只是作爲一個翻譯器。

您目前是否遇到問題,或者您是否只是想問一個問題?

+0

現在我只是在假設問,但我希望明天就試一試。 – asdrubael 2009-03-02 15:54:44

3

您的32位應用程序是否直接調用驅動程序? (我正在猜測驅動程序的模擬器!)

32位和64位dll之間進行通信的唯一方法是編寫一個管理通信的COM服務器(請閱讀:將應用程序調用或之間的64位驅動程序響應)。

有一件事回來咬我:當我第一次寫這個COM服務器(是的,我也不得不忍受很多不眠之夜,才知道這個技巧),我只建立了32位版本的(自動生成)代理/存根的DLL。在我開始瞭解該解決方案之前,接下來會有一段不眠之夜:爲32位和64位構建代理/存根dll。 32位方面處理32位方面(在你的情況下是應用程序)和64位方面(驅動程序)。 COM管理代理/存根的不同版本如何相互通信。哦,讓服務器註冊在你的系統上。很簡單,對吧?

相關問題