【发布时间】:2019-01-24 21:28:36
【问题描述】:
我想创建一个使用 WINAPI AddVectoredExceptionHandler 的类。
我用谷歌搜索了一下,每个人都说要让它成为静态的,因为 WINAPI 是纯 C 语言并且不知道类。
如果我将其设为静态,我将无法在静态函数中使用类成员。
之后,我在“如何从同一类的静态方法调用非静态方法?c++”上搜索了一下
但是除了回调 WINAPI 函数之外什么都没找到。
如何在课堂上使用这个 WINAPI?因为它不是回调函数? (我还搜索了回调函数)(似乎不是一个?)
class VEH
{
public:
VEH();
private:
void functionA(int a);
/*static*/ LONG ExceptionHandler(EXCEPTION_POINTERS* ExceptionInfo);
};
VEH::VEH()
{
AddVectoredExceptionHandler(2,(PVECTORED_EXCEPTION_HANDLER)ExceptionHandler); //INVALID TYPE CONVERSION (if non static)
}
void functionA(int a){
}
LONG ExceptionHandler(EXCEPTION_POINTERS* ExceptionInfo){
functionA(2); //a non-static member reference must be relative to a specific object (if static)
}
【问题讨论】:
-
VectoredHandler是全局感知函数。它不会在调用中接收额外的上下文。所以你不能在这里获得指向类实例的指针(如果这不是全局实例)。当然可能动态分配可执行内存thunk,它调用你的类成员函数,但这样做真的没有意义。无论如何 - 你打算有 multiple 类VEH的实例吗?