我正在考虑将 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/