2010-01-12 46 views
5

你好堆栈溢出:有时读者,第一次张贴海报。IPC与注册DLL之间的应用程序

背景:

Windows中运行XP SP3,很快就被升级到了Windows 7(MSDNAA < 3)

我有一个注入DLL,其挂钩一个名为成千上万函数获取周期一秒钟的时间。

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

我这样做的游戏计划是我会有一个计数器和一个if语句在DLL中。每次调用挂钩函数时,counter ++,然后跳回到原始函数,直到if(counter == 250){// dostuff(); }。我的背后,它将允许目标应用程序运行大多无阻碍,但仍然会让我做有趣的事情。

问题:

我在上IPC方法我应该用做通信的绝对损失。我们有套接字,共享内存,管道,filemapping(?),RPC和其他(看似)深奥的东西,比如写入剪贴板。

我从来没有实现任何种类的IPC超出玩具的例子。

我确信我需要的东西:

  • 可以处理说话来回蟒蛇和DLL
  • 不会阻止之间/等待
  • 可以检查等待数据,并继续,如果没有任何
  • 如果锁都参与其中,可以继续而不是等待
  • 不花费大量的时间来读/写得太

帮助?谢谢你的时间,我希望我已经提供了足够的一般信息,并没有违反任何公认的惯例。

我想补充说,相关的问题框是非常酷的,我在发布前仔细阅读了它。

回答

2

尝试套接字。您的需求基本上是异步操作的要求; Python在套接字上有用于异步IO的模块asyncore。同时,它看起来并不像Python的stdlib可以异步处理其他IPC事物,所以我不推荐使用它们。

1

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

+1

使用日志文件根本不是* IPC。 – ulidtko 2011-01-20 16:00:18

+0

@ulidtko文件系统是IPC同步中最古老也是最可靠的形式。这就是为什么POSIX标准为所有形式的IPC提供相同的API。由于OS **必须**管理文件系统操作(或不称为OS)中的一致性和同步,所以文件系统是用于非OS程序的IPC的最简单实现。试试'ls/var/run/*。pid'下一次您可以访问* nix系统。 – Apalala 2011-01-21 06:14:14

+1

印刷是更加古老和可靠的形式...将信息存储在纸上。 OS **必须**管理打印内容的一致性,任何人都可以自行管理所有需要的同步。你为什么不尝试打印“Hello world!”在纸上,然后扫描和OCR它来控制你的程序?对不起,但你的评论不只是一个参数。打印机应打印文件,文件系统应存储文件,shmem-pipes-socket应提供IPC的方式。 – ulidtko 2011-01-21 06:24:32