【发布时间】:2011-11-26 00:25:31
【问题描述】:
我正在考虑为我所做的一些常见事情构建 DLL 的一些想法。我想检查的一件事是否可能是在 DLL 中运行线程。我确信我至少可以启动它,并让它在终止时自动释放(并使其强制终止自身)——我认为这不是什么大问题。但是一旦我启动它,我看不到如何继续与它通信(尤其是停止它),主要是因为对 DLL 的每次调用都是唯一的(据我所知),但我对主题。
我已经看到在某些情况下,DLL 可以在开始时加载并在不再需要时在结束时释放。我对这种方法的知识或经验为 0,除了看到与它相关的东西,甚至不能告诉你什么或如何,我不记得了。但这有可能吗?
我知道 ActiveX/COM,但这不是我想要的 - 我只想要一个可以跨语言(特别是 C#)使用的基本 DLL。
另外,如果可能的话,我将如何进行从 DLL 到应用程序的回调?例如,当我启动线程时,我很可能会分配一个函数(在 EXE 中)作为事件(从 DLL 触发)的处理程序。
所以我想我要问的是 - 如何加载 DLL 以进行连续工作并在完成后释放它 - 而不是根据需要调用 DLL 中的各个函数的简单方法。在同样的情况下——我可能会在 DLL 中分配变量或创建对象。如何确保一旦分配了该变量(或创建了对象),如何确保下次调用 DLL 时该变量或对象仍然可用?显然,它需要一种初始化/完成 DLL 的机制(即在加载 DLL 时在 DLL 中创建对象,并在卸载 DLL 时释放对象)。
编辑: 最后,我将 DLL 包装在一个组件中,因此当创建组件的实例时,将加载 DLL 并在 DLL 中创建相应的线程,然后当组件被释放时,DLL 被卸载。还需要确保如果这些组件中有 2 个,那么每个组件都会加载 2 个 DLL 实例。
这是否与 IInterface 的使用有关?因为我也有这方面的 0 经验。
无需直接用示例源代码回答这个问题 - 一个好的教程的链接会很棒。
【问题讨论】:
-
最后一点,我的意思是我不希望任何人花时间详细回答这个问题,我知道这是一个很大的话题,我需要的只是有人给我看一个教程这样做,而不使用 ActiveX。
-
启动无法与之通信和控制的线程是个坏主意。
-
确实,这就是为什么我要在他们开始之后弄清楚如何与他们交流。
-
我找到了这个网页:delphi3000.com/articles/article_1366.asp?SK=,它准确地描述了我想要找出的内容(加载/卸载 dll)——但是这个线程安全吗?
-
如果不描述你的线程模型,线程安全本身是没有意义的。每个实例一个线程?一个全局实例?您的问题真的是关于如何使用 LoadLibrary 吗?如果是这样,请不要依赖那篇文章。