【问题标题】:Can I use member function as a callback in SERVICE_TABLE_ENTRYA structure我可以使用成员函数作为 SERVICE_TABLE_ENTRYA 结构中的回调吗
【发布时间】:2013-12-12 08:52:53
【问题描述】:

我可以使用成员函数作为 SERVICE_TABLE_ENTRYA 结构中的回调吗?它的类型 LPSERVICE_MAIN_FUNCTION 被定义为

typedef VOID (WINAPI *LPSERVICE_MAIN_FUNCTIONA)(
    DWORD   dwNumServicesArgs,
    LPSTR   *lpServiceArgVectors
);

这里的主要问题是 WINAPI 调用约定(我不能像 previous question 那样使用 lambda)。我也不想使用静态成员函数。

【问题讨论】:

  • 很好,因为静态成员函数并不总是能正常工作。无论如何,由于它无法传递任意数据,您可能会发现这很有用:stackoverflow.com/questions/18169180/…
  • 不过,我认为您可能能够与服务建立某种形式的通信以通过对象发送。
  • 很难知道为什么要使用非静态成员函数。我想知道这个问题背后是否存在一些更深层次的误解。
  • @DavidHeffernan,至于使用静态的,this page 非常有用。
  • 请注意,VC++ 自动使用正确的调用约定,因此如果您使用该编译器,则可以安全地使用带有 WinAPI 回调函数的 lambda。

标签: c++ windows winapi


【解决方案1】:

您不能使用非静态成员函数。它们根本与该原型不兼容。

您需要兼容的东西,例如非成员函数或静态成员函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多