了解 DLL 中的 C++ 语法 class

Understanding C++ syntax in a DLL class

我试着理解一些代码,可以总结成这样:

class FooClass {
    public:
        void Foo();
        static void (FooClass::*Foo_Original)();
};

void (FooClass::* FooClass::Foo_Original)() = 0;
void FooClass::Foo() {
    (this->*Foo_Original)();
}

这是 Visual Studio 中更复杂的 dll 解决方案的一部分。从调试器中,我发现方法 Foo() 是从其他一些 dll 调用的。有人可以解释这种语法的含义吗?它应该做什么?

这与此不重复。 C++: Pointer to class data member 请多考虑一下

我用得不多,但这看起来像是在声明一个 ptr-to-a-FooClass-member-function,它采用零 args 和 'returns' void。我不确定它是在声明一个静态指针,还是一个指向静态成员函数的指针。

FooClass 公开了一个成员函数 Foo() 和一个指向成员函数的静态指针。该指针称为 Foo_Original

因为它是一个静态指针,所以它必须被初始化,这里是 0(又名 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();
}

P.S.: 我不知道在你的具体情况下这与 dll 和 dll 注入有什么关系,但我可以想象你的 FooClass 动态加载一些 DLL 并提供标准化他们的界面。