2010-01-12 71 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