【发布时间】:2012-06-07 21:47:45
【问题描述】:
我有一个 ActiveX (COM) DLL,它可以进行 Windows 系统调用(例如 ReadFile() 和 WriteFile())。我的 GUI(在 Python 或 C# 中)在主 GUI 线程中创建 DLL 的实例。但是,为了从线程调用它,必须在每个线程中创建一个新的 DLL 实例,无论使用 C# 还是 Python。 (作为旁注,可以从 C# 中的线程调用原始实例,但这会阻塞主线程;在 Python 中这样做会使 GUI 崩溃。)有没有办法避免在线程中创建 DLL 的新实例?
需要使用原始 DLL 实例的原因:DLL 允许连接到 HID 微控制器。 DLL 提供了一个选项,只允许微控制器使用一个独占句柄。如果 GUI 设计者选择此选项(在某些情况下这是必需的),第二个 DLL 实例将无法按预期工作,因为只有一个 DLL 实例可以建立连接。
【问题讨论】:
-
在线程中创建新实例有什么问题?只是为了避免它?
-
好问题;我更新了原始问题,因为它是一个重要的细节。
-
ActiveX 只能由 GUI 线程调用,也可以由 STA 调用。 See this post 您需要将后台线程的调用编组到 GUI 线程,以便使用 ActiveX 对象。
-
我相信我可以而且实际上可以在主线程以外的线程中创建 ActiveX 对象:“但是,为了从线程中调用它, DLL 必须在每个线程中创建,无论使用 C# 还是 Python”。但是,我的目标是不这样做。
-
您能否解释一下“但是,为了从线程调用它,必须在每个线程中创建一个新的 DLL 实例”,更详细地包括为什么会这样? ?
标签: c# python multithreading dll activex