delphi - 将 WinAPI 回调封装在类中的最优雅的方法

标签 delphi winapi callback

我正在考虑将 WinAPI 回调封装在类中的优雅方法。假设我正在创建一个处理异步 I/O 的类。所有 Windows 回调都应该是 stdcall 函数,而不是类方法(例如,我需要将它们的地址传递给 ReadFileEx WinAPI 函数)。因此,我不能只将方法地址作为回调例程传递给 WinAPI 函数。

将这种类型的功能封装在类中以便该类具有 OnReadCompleted 和 OnWriteCompleted 事件的最优雅的方法是什么(我使用 Delphi 作为主要语言,但我猜情况在 C++ 中一定是相同的,因为类方法与简单方法的区别在于,方法的第一个隐藏参数是this链接,当然这个类不是单例,app可以同时创建多个类.

您认为实现此目的的好方法是什么?

最佳答案

我怀疑这是否优雅,但是,IMO,最简单的是将类的方法的地址转换为过程地址并将其传递给 winapi。当然,这是一个 hack,但 VCL 对 classes.MakeObjectInstance 做了同样的事情,如果只是针对特定的构造的话。.参见 this question对于source对于这种实现和其他一些更面向对象的方法来处理这种情况。

关于delphi - 将 WinAPI 回调封装在类中的最优雅的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2953070/

相关文章:

Delphi:泛型后代的泛型列表并以泛型作为参数

c++ - 多窗口程序

javascript - 在for循环中解析查询(回调)

web-services - API Hook /回调的最佳做法?

android - 在从不同计算机编译的旧 APK 上安装新 APK

excel - 如何格式化剪贴板中的行和列以像从 Excel 中一样粘贴?

delphi - 我可以让 TTreeNode 不可见吗?

c++ - 如何确定计算机上安装的物理 RAM? ( Windows )

c - 使用互斥锁锁定对列表对象的所有访问

javascript - 如何返回 Array 对象中的最后一项