类内的Typedef函数

时间:2018-08-17 16:32:02

标签: c++ function class typedef stdcall

我希望能够在一个类中包含我的typedef函数。但是我没有找到一种方法。我需要扫描地址,以便无法对其进行硬编码,因此我需要像这样SetCursorPosFunction = (_SetCursorPos)(address to function);

设置地址

示例:

class Cursor
{
public:

    typedef BOOL(__stdcall *_SetCursorPos) (int X, int Y);
    _SetCursorPos SetCursorPosFunction;
};

我希望能够像这样Cursor::SetCursorPosFunction(x,y)

调用该函数

我的意思的例子。

void Function()
{
    DWORD_PTR AddressToFunctionSetCourserPos = Find(....);
    Cursor::SetCursorPosFunction = (Cursor::_SetCursorPos)(AddressToFunctionSetCourserPos ); //In final version it is going to be in a separate function where i get all the functions i need (This find() function can not be looped or called often, it is going to create lag etc.).

    Cursor::SetCursorPosFunction(1, 1);

}

我得到了错误:

fatal error LNK1120: 1 unresolved externals
error LNK2001: unresolved external symbol "public: static int (__cdecl* Cursor::SetCursorPosFunction)(int,int)" (?SetCursorPosFunction@Cursor@@2P6AHHH@ZEA)

2 个答案:

答案 0 :(得分:3)

如果要模拟成员函数,则应在尝试使用游标之前创建一个游标实例:

Cursor cursor;
cursor.SetCursorPosFunction(x, y);

您还可以在类中添加一个构造函数以初始化指针:

class Cursor
{
public:
    Cursor()
        : SetCursorPosFunction((_SetCursorPos) GetProcAddress(...))
    { }
    typedef BOOL(__stdcall *_SetCursorPos) (int X, int Y);
    const _SetCursorPos SetCursorPosFunction;
};

答案 1 :(得分:3)

将函数修改为static将使您可以使用它,而不必先根据需要实例化成员:

class Cursor
{
public:
    typedef BOOL(__stdcall *_SetCursorPos) (int X, int Y);
    static _SetCursorPos SetCursorPosFunction;
};

Cursor::SetCursorPosFunction(x,y)现在应该可以工作了(假设您先对其进行了初始化)。

您还需要在全局空间中初始化静态成员。 Cursor::_SetCursorPos Cursor::SetCursorPosFunction = nullptr;之类的东西应该可以工作。但是请注意,只能在一个翻译单元中使用它。