gpt4 book ai didi

C++类成员函数转c函数

转载 作者:行者123 更新时间:2023-11-30 19:42:01 25 4
gpt4 key购买 nike

我有一个 C 函数,它可以接收其他 C 函数(如参数),该函数是 C 库的一部分,我需要使用它,但需要使用 C++ 函数(类的成员)。

传递类似参数的函数定义:

void __stdcall CallbackFunctionC(unsigned long esrParam);

resive函数的定义是:

int void __stdcall SetESR( void (__stdcall *esr)(unsigned long esrParam) );

我想传递一个具有相同定义的成员类函数,但我不能。

这是带有 C 函数的成功代码示例:

class ClassTest
{
public:
void Test();
}
void __stdcall CallbackFunctionC(unsigned long esrParam);

void ClassTest::Test()
{
SetESR(CallbackFunctionC);
}
void __stdcall CallbackFunctionC(unsigned long esrParam)
{
//Do something
}

我需要传递一个函数成员,但这会引发错误。错误代码示例:

class ClassTest
{
public:
void __stdcall CallbackFunctionCPP(unsigned long esrParam);
void Test();
}

void ClassTest::Test()
{
SetESR(CallbackFunctionCPP);
}

void ClassTest::CallbackFunctionCPP(unsigned long esrParam)
{
//Do something
}

错误:

Error   3   error C3867: 'ClassTest::CallbackFunctionCPP': function call missing argument list; use '&ClassTest::CallbackFunctionCPP' to create a pointer to member ...\ClassTest.cpp   XXXX    1   ClassTest

最佳答案

首先您需要确保您的函数定义是正确的。我在您的代码中看到的是,您声明了一个带参数的成员函数,并且定义了相同的不带参数的成员函数。您应该像声明它一样定义它。

void ClassTest::CallbackFunction(unsigned long esrParam)
{
//do somthing
}

另一件事是,您不能使用成员函数创建回调函数。您需要添加一个静态函数。

class ClassTest
{
public:
static void CallbackFunction(unsigned long esrParam); // <-- static function
void Test();
};

你的代码的第二部分真的很奇怪,我真的不明白你想做什么。你为什么要把你的回调函数传递给他自己。这没有道理。通常,回调函数被赋予另一个对象,该对象本身(因此另一个类)和另一个类保留函数的指针以便稍后调用它。

最后一件事是,你真的不需要 __stdcall。这是Win32 API约定,与回调函数无关。

关于C++类成员函数转c函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33002575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com