2012-05-29 85 views
1

我有一個使Windows系統調用(如ReadFile()和WriteFile())的ActiveX(COM)DLL。它從主要的Python GUI線程工作正常。但是從線程調用時會崩潰我的Python GUI。我在網上做一些研究,想着我需要對GIL做些什麼。我在正確的軌道上嗎?或者請指出正確的方向。謝謝!從Python線程中調用的ActiveX DLL

回答

0

很難說什麼沒有看到代碼,但可能的情況是:

  1. 您的ActiveX根本不支持多線程(其中許多是沒有),並嘗試與不同對象的工作線程。
  2. 包含ActiveX的DLL執行一些每線程初始化,但是當您從另一個線程調用它時,它不會被初始化。

無論如何,我不能說GIL的任何事情,但在過去處理過ActiveX,我認爲問題的根源很可能是ActiveX。

+0

該DLL是單元線程(STA)。它在C#GUI調用時起作用。 http://msdn.microsoft.com/en-us/library/aa261361%28v=vs.60%29.aspx – tosa

+0

如果我在線程中創建了一個新的DLL實例,它在Python中有效。另外,爲了不阻塞C#中的主線程,需要在線程中創建一個新實例。有沒有辦法避免創建DLL的新實例? – tosa

0

正如弗拉基米爾提到的那樣,我可能是你的COM組件不是多線程安全的,你可能會測試你的DLL註冊的「Apartment」類型。這個article很好地概述了這個問題。

+0

應該是「免費」作爲ThreadingModel存在,只需嘗試「公寓」。我得到了這個問題一次,這個技巧救了我的生命.. :-) – mox