delphi – 在dll中传输基本程序中的过程名称并在那里执行它

delphi – 在dll中传输基本程序中的过程名称并在那里执行它,第1张

概述程序使用的程序和dll(都是在Delphi上编写的,代码都可以访问). 在程序中有一个程序X,它根据来自dll的程序Y的询问推断出一些统计数据(在计时器上). 过程Y在dll中发生某些事件时变得更加活跃,这可能在不同的时间间隔内出现. 问题:是否可以在dll中传输名称程序X,并在程序Y中执行它,以便立即了解发生的事件,而不是在计时器上查询它. 再次(或作为变体):如何在程序中定义,dll中有什么事 程序使用的程序和dll(都是在Delphi上编写的,代码都可以访问).
在程序中有一个程序X,它根据来自dll的程序Y的询问推断出一些统计数据(在计时器上).
过程Y在dll中发生某些事件时变得更加活跃,这可能在不同的时间间隔内出现.

问题:是否可以在dll中传输名称程序X,并在程序Y中执行它,以便立即了解发生的事件,而不是在计时器上查询它.
再次(或作为变体):如何在程序中定义,dll中有什么事件并执行过程X的代码?
如果有可能,那就是一个代码示例.

解决方法 如果我正确理解你的问题,你在EXE中有一些代码,在DLL中有一些代码.每隔一段时间,一个计时器就会触发,这会导致某些东西在其他方面进行轮询(不清楚谁在轮询什么),以查看一方是否有任何工作可用,而另一方的代码可以处理.并且您希望有一种方法让一方在工作可用时立即通知另一方,而不是等待计时器.

有一个非常完善的方法来做到这一点.在Delphi中设置它的标准习惯是使用事件和事件处理程序.这是基本的想法:

让我们调用创建数据的一方发布者,以及处理消费者工作的一方.为Publisher对象提供TNotifyEvent类型的变量.这在Classes单元中声明为

TNotifyEvent = procedure(Sender: TObject) of object;

如果这看起来很熟悉,那是因为很大比例的VCL事件处理程序(如Tbutton.OnClick)属于TNotifyEvent类型.如果要在事件中传递更多有用的数据,则可以声明自己的事件类型.例如:

TDataReadyEvent = procedure(data: TStatisticalData) of object;

将事件处理程序类型的变量放在Publisher(FOnDataReady:TDataReadyEvent;)上,并创建一个公开它的属性.然后添加一些代码来触发事件.在Producer的某个地方,您有代码可以生成要分析的新数据.在完成之后,添加如下内容:

if assigned(FOnDataReady) then  FOnDataReady(NewData);

然后,在Consumer上,创建一个签名与事件处理程序类型匹配的方法.它应该能够处理数据.要将它们链接在一起,请在Consumer的初始化代码中执行以下 *** 作:

Producer.OnDataReady := self.HandleDataReady;

你有它!这真的很简单.现在,无论何时可以从Producer获得新数据,都会自动调用您的Consumer,而不必使用计时器并不断轮询Producer,询问它是否还有任何内容.

总结

以上是内存溢出为你收集整理的delphi – 在dll中传输基本程序中的过程名称并在那里执行它全部内容,希望文章能够帮你解决delphi – 在dll中传输基本程序中的过程名称并在那里执行它所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1267441.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存