理解DLL类中的C++语法
我试图理解一些代码,这些代码可以概括为:理解DLL类中的C++语法,c++,dll,function-pointers,dll-injection,C++,Dll,Function Pointers,Dll Injection,我试图理解一些代码,这些代码可以概括为: class FooClass { public: void Foo(); static void (FooClass::*Foo_Original)(); }; void (FooClass::* FooClass::Foo_Original)() = 0; void FooClass::Foo() { (this->*Foo_Original)(); } 这是VisualStudio中更复杂的d
class FooClass {
public:
void Foo();
static void (FooClass::*Foo_Original)();
};
void (FooClass::* FooClass::Foo_Original)() = 0;
void FooClass::Foo() {
(this->*Foo_Original)();
}
这是VisualStudio中更复杂的dll解决方案的一部分。从调试器中,我发现方法Foo是从其他dll调用的。有人能解释一下这个语法是什么意思吗?它应该做什么
这和这个不一样。
请仔细考虑一下我不怎么使用它们,但这看起来像是在声明一个ptr-to-a-fooklass-member-function,它接受零参数并“返回”void。我不确定它是声明一个静态指针,还是一个指向一个静态成员函数的指针。Foo类公开一个成员函数Foo和一个指向成员函数的静态指针。指针称为Foo_Original 由于它是一个静态指针,因此必须对其进行初始化,这里使用0 aka nullptr 函数Foo只调用Foo_Original指向的函数。当然,作为U.B,这将做其他事情,只有在指针被初始化到某个成员函数的地方 例如:
class FooClass {
public:
void Foo();
static void (FooClass::*Foo_Original)();
// additional member functions for the demo:
void Bar() { std::cout << "Bar was called" << std::endl; }
void Goo() { std::cout << "Goo was called" << std::endl; }
};
int main()
{
FooClass f;
// f.Foo(); ==> U.B, as Foo_Original is still 0
f.Foo_Original = &FooClass::Bar;
f.Foo();
f.Foo_Original = &FooClass::Goo;
f.Foo();
}
附言:我不知道这与您的特定案例中的dll和dll注入有什么关系,但我可以想象您的FooClass动态加载了一些dll,并为它们提供了一个标准化的接口。您的犹豫是可以理解的,仅此一点就足以证明对原始问题的投票是正确的!它是指向非静态成员函数的静态指针。对于静态函数,将没有FooClass::*。应该澄清您的疑问:-