在一个程序中结合使用32位和64位驱动程序

兹曼

我需要加载.dll文件中提供的不同硬件驱动程序。问题似乎在于,一个设备的驱动程序是在64位dll中给出的,而另一设备(较旧)显然依赖于32位dll中给出的驱动程序。我想通过用C#编写的程序来控制它们,该程序将通过python包装器运行。

显然,我不能直接从一个程序运行两个设备,但是我需要一种相互依赖的方法来解决它们-例如:设备1等待设备2完成某些工作。有什么办法可以解决这个问题,还是我需要在两个单独的程序中运行它们并通过python包装器相互依赖来管理操作?

问候

迈克尔·佩奇

在64位Windows上,64位进程不能使用32位DLL,而32位进程不能使用64位DLL。Microsoft已记录以下内容:

在64位Windows上,64位进程无法加载32位动态链接库(DLL)。此外,一个32位进程不能加载64位DLL。

您将需要一个与32位DLL进行通信的32位进程和一个与64位DLL进行通信的64位进程。微软这样说:

但是,64位Windows支持64位和32位进程之间的远程过程调用(RPC)(在同一台计算机上和跨计算机)。

然后问题变成了如何让Python与这些进程通信的问题之一。需要某种形式的进程间通信(IPC)。微软数十年前就发明了一种可以做到这一点的技术-使用Out of Process COM服务器(过程外)的COM接口。

总体思路是:

  • 创建一个64位进程外COM服务器,该服务器包装(并公开)所需的方法和64位DLL的数据。
  • 创建一个32位进程外COM服务器,该服务器包装(并公开)32位DLL的所需方法和数据。
  • 编写用于实例化COM对象并调用其接口的32位或64位客户端代码。Python可以通过win32com用作COM客户端

COM在幕后提供了IPC机制,该机制允许64位客户端访问64位进程外COM服务器,并允许64位客户端访问32位进程外服务器。您甚至可以让32位客户端与32位和64位进程外COM服务器进行通信。

我尚未使用较新的MS语言完成Windows的低级工作。当我不得不做您需要解决的问题时,使编写COM服务器和COM接口变得容易的两种主要技术是:

我比较喜欢ATL,因为它不需要MFC库并且开销较小。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以在64位Windows 7上使用32位驱动程序?

在64位操作系统上使用32位驱动程序

通常,您可以在64位操作系统上使用32位驱动程序吗?

使用VBS和注册表来确定安装了哪个版本以及32位和64位oracle驱动程序

将32位和64位应用程序(具有相同的代码)编译为一个exe

SSIS包访问Oracle DB。您如何知道使用的是32位还是64位Oracle驱动程序?

可以使用NVIDIA驱动程序在32位Linux Mint上运行64位内核吗?

给定一个同时具有32位和64位版本的程序,如何将它们以不同的名称同时放入我的PATH中?

我可以将64位MS Access连接到32位ODBC驱动程序吗?

如何在64位Ubuntu 13.10或更高版本上安装32位Brother驱动程序?

在64位OS上替代32位打印机的驱动程序

SSIS 解决方案 - 使用 32 位 ODBC 驱动程序开发。需要对使用 64 位 ODBC 驱动程序运行的解决方案进行一些调整

一个程序是32位还是64位意味着什么?

使用32位应用程序中的64位库

VBA API从32位和64位注册表中读取一个值

PYODBC + PYINSTALLER:EXE列出了不同的驱动程序,如编译器(PyCharm),32位访问和64位Python

结合使用32位JRE和64位Eclipse

如何结合使用Python 32位和64位模块

在多体系结构的64位Debian系统上具有nVidia OpenGL 32位驱动程序

NVIDIA 440.64 32位库软件包破坏了64位驱动程序软件包

具有64位R的32位数据库驱动程序可查询大数据

SSIS包失败,并显示错误“如果未安装64位驱动程序,请以32位模式运行”

Java 64位JDBC-ODBC驱动程序问题

错误获取ATI驱动程序64位

使用QAF时,如何在TestNG XML文件中配置一个测试以启动两个驱动程序,例如Chrome驱动程序和Android驱动程序

无法使用 64 位 Python 3.6.ODBC 驱动程序错误连接到 64 位 MsAccess 数据库

Ubuntu 13.04 32位中的Brother DCP-J140W驱动程序

32位Eclipse和64位Java程序

在 64 位 Ubuntu 上使用专有 Nvidia 驱动程序的 Wine