2009-03-02 132 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管理代理/存根的不同版本如何相互通信。哦,让服务器注册在你的系统上。很简单,对吧?

相关问题