了解DLL类中的c++语法

Understanding C++ syntax in a DLL class

本文关键字:c++ 语法 DLL 了解      更新时间:2023-10-16

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

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调用的。有人能解释一下这个语法是什么意思吗?它应该做什么?

这个和这个不重复。指向类数据成员的指针

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();
}

注::我不知道这与dll和dll注入有什么关系,但我可以想象你的FooClass动态加载一些dll,并为它们提供一个标准化的接口。

我不太使用它们,但这看起来像是声明了一个ptr-to-a-FooClass-member-function,它接受零参数并'返回' void。我不确定它是声明了一个静态指针,还是一个指向静态成员函数的指针。