【发布时间】:2019-08-03 02:51:03
【问题描述】:
我需要加载 .dll 文件中提供的不同硬件驱动程序。 问题似乎是一个设备的驱动程序是在 64 位 dll 中给出的,而另一个设备(相当旧的)显然依赖于 32 位 dll 中给出的驱动程序。我想通过一个用 C# 编写的程序来控制它们,该程序将通过 python 包装器运行。
显然我不能直接从一个程序运行这两个设备,但我需要一种方法来解决它们相互依赖的问题 - 例如:设备 1 等待设备 2 完成某些工作。有什么办法可以规避这个问题,还是我需要在两个单独的程序中运行它们并通过 python 包装器管理相互依赖的操作?
【问题讨论】:
-
是的,您将需要 2 个独立的进程,从不同的可执行文件运行。让一个 64 位进程启动一个对 32 位代码段执行
jmp far的 thread 在技术上可能是可行的,但这太疯狂了,而且可能 very一切。即使您在 asm 中手写,也可能无法稳定地做到这一点,这取决于 Windows 内核在中断/系统调用它认为应该是 64 位的线程后如何返回用户空间。跨度> -
这听起来绝对不像我会做的事情。毕竟,必须通过两个单独的进程来解决这个问题甚至还不错,因为已经在不同的类中提供了功能。
-
当 Windows 从 16 位迁移到 32 位时,Microsoft 提供了一个 thunking 层以允许从 16 位世界过渡到 32 位世界。当 64 位到达时,然后采取“永不重复”的立场并强制执行“每个进程一个位”规则。您需要两个进程以及它们之间的某种 RPC 机制。
-
@Flydog57 : Win32s(和 thunking 层)的美好时光。
标签: c# winapi dll x86 32bit-64bit