是否可以将成员函数传递给 QueueUserAPC
Is it possible to pass a member function to QueueUserAPC?
是否有可能或解决方法将成员函数传递给Windows API函数QueueUserAPC()?
好的,我可以传递一个静态成员函数。但是这样我将无法完全访问局部成员变量...
那么是否有可能将两者结合起来,作为成员函数传递并完全访问非静态成员变量?我试图制定与此相关的解决方案,但尚未成功。
希望有人有解决这个问题的想法。
这是在
让 C 样式回调调用C++函数时使用的一种标准模式。
您创建一个转发调用的自由函数(或静态成员)...
VOID CALLBACK ForwardTo_MyClass_func( _In_ ULONG_PTR dwParam )
{
auto* p = (MyClass*)dwParam;
p->func();
}
。然后通过将实例指针作为第三个参数传递给 QueueUserAPC 来设置它:
QueueUserAPC( ForwardToMyClass_func, hThread, (ULONG_PTR)pMyClass );
如果需要更多参数,则必须创建某种结构来保存实例指针和参数。
答案是否定的。Windows API具有C接口,因此无法处理名称损坏的签名,例如C++成员函数。您传递的函数必须是 C 样式的自由函数。
顺便说一下,将其嵌套在命名空间中是可以接受的,如果可扩展性较低:
namespace apc_stuff
{
static MyStruct some_static_data;
static void __stdcall MyApcFunc(ULONG_PTR data); // PAPCFUNC
};
using namespace apc_stuff;
MyClass::DoSomething(...)
{
auto my_data = new MyData(...);
auto data = reinterpret_cast<ULONG_PTR>(my_data);
QueueUserAPC(MyApcFunc, hThread, data)
}
/*static*/ void __stdcall apc_stuff::MyApcFunc(ULONG_PTR data)
{
auto my_data = reinterpret_cast<MyData *>(data);
//
// use my_data
// use some_static_data
//
}
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 是否可以将成员函数传递给 QueueUserAPC