相关疑难解决方法(0)

函数指针指向类成员函数问题

首先,我必须承认我的编程技巧非常有限,我接手了一个(非常小的)现有的C++ OOP项目,我尝试将自己的东西推进去.不幸的是,我遇到的问题超出了我的知识范围.我希望在这里找到一些帮助.我正在使用第三方库(无法更改)从相机中抓取图像,并在此处使用一些占位符名称.

第三方库有一个函数"ThirdPartyGrab"来启动一个连续的实时抓取,并获取一个指向一个函数的指针,该函数将在每次新帧到达时被调用.所以在普通的C应用程序中它是这样的:

ThirdPartyGrab (HookFunction);
Run Code Online (Sandbox Code Playgroud)

"HookFunction"需要声明为:

long _stdcall HookFunction (long, long, void*);
Run Code Online (Sandbox Code Playgroud)

或"BUF_HOOK_FUNCTION_PTR",声明为

typedef long (_stdcall *HOOK_FUNCTION_PTR) (long, long, void*);
Run Code Online (Sandbox Code Playgroud)

现在我有一个C++应用程序和一个类"MyFrameGrabber",它应该封装我所做的一切.所以我将钩子函数作为私有成员放入这样的:

long _stdcall HookFunction (long, long, void*);
Run Code Online (Sandbox Code Playgroud)

在我班上还有一个公共无效函数"StartGrab",应该启动Grab.在里面我试着打电话:

ThirdPartyGrab (..., HookFunction, ...);
Run Code Online (Sandbox Code Playgroud)

(毫不奇怪)失败了.它说对MyFrameGrabber :: HookFunction的函数调用错过了参数列表,我应该尝试使用&MyFrameGrabber :: HookFunction来创建指针.但是,传递"&MyFrameGrabber :: HookFunction"会导致另一个错误,即无法将其转换为BUF_HOOK_FUNCTION_PTR.

通过阅读C++ FAQ函数指针后,我认为我理解了这个问题,但无法解决问题.我试图使钩子函数静态,但这也导致转换错误.我还想过把钩子函数放在类之外,但我需要在钩子函数中使用类函数.还有其他方式还是我需要改变我的整个概念?

编辑14.01.08:我测试了单例解决方法,因为我无法更改第三方库,并且void指针仅用于在钩子函数内使用的数据.不幸的是它并没有像我希望的那样开箱即用....我不知道静态函数是否需要在一个单独的类中,所以我把它放在我的"MyFrameGrabber"类中:

static MyFrameGrabber& instance()
{
        static MyFrameGrabber _instance;
        return _instance;
}
long Hook(long, long, void*); // Implementation is in a separate cpp file
Run Code Online (Sandbox Code Playgroud)

在我的cpp文件中,我有call_hook函数:

long MFTYPE call_hook(long x, MIL_ID y, void MPTYPE *z)
{
    return MyFrameGrabber::instance().Hook(x,y,z);
} …
Run Code Online (Sandbox Code Playgroud)

c++ pointers function-pointers

5
推荐指数
2
解决办法
5269
查看次数

标签 统计

c++ ×1

function-pointers ×1

pointers ×1