5

你好堆栈溢出:有时读者,第一次海报。

背景:

运行 XP SP3 的 Windows 机器,即将升级到 Windows 7 (MSDNAA <3)

我有一个注入的 DLL,它通过挂钩每秒调用数千次的函数来获取循环。

我想通过 python 应用程序通信/控制这个 DLL。基本上,DLL 完成工作,python 应用程序提供大脑/决策。

我的游戏计划是在 DLL 中有一个计数器和一个 if 语句。每次调用钩子函数时,counter++ 然后跳回到原来的函数,直到像 if (counter == 250) { // dostuff(); }。我虽然在这之后它将允许目标应用程序几乎不受阻碍地运行,但仍然会让我做一些有趣的事情。

问题:

我完全不知道应该使用哪种 IPC 方法进行通信。我们有套接字、共享内存、管道、文件映射(?)、RPC 和其他(看似)深奥的东西,比如写入剪贴板。

除了玩具示例之外,我从未实现过任何类型的 IPC。

我很确定我需要一些东西:

  • 可以处理 python 和 DLL 之间的来回对话
  • 不阻塞/等待
  • 可以检查等待数据,如果没有则继续
  • 如果涉及锁,可以继续而不是等待
  • 也不需要花费大量时间来读/写

帮助?感谢您抽出宝贵时间,我希望我提供了足够的一般信息,并且没有违反任何公认的约定。

我想补充一点,相关问题框非常酷,我在发布之前确实仔细阅读了它。

4

2 回答 2

2

试试插座。您的需求本质上是异步操作的需求;Python 具有用于套接字上的异步 IO 的asyncore模块。同时,Python 的 stdlib 似乎不能异步处理其他 IPC 事物,所以我不建议使用它们。

于 2011-01-20T16:05:29.177 回答
1

如果您不关心实时,那么您可以使用文件系统进行通信:DLL 输出的日志文件和不时读取以更改 DLL 行为的配置文件。

于 2011-01-07T02:21:13.200 回答