如何在第三方库调用的回调函数内传递/使对象/变量可访问?

时间:2016-10-08 12:53:30

标签: c++ callback global-variables global-object

如何通过globalObject访问callbackFunction

我正在使用方法library.h的第三方库libraryFunctionlibraryFunction的输出是libraryFunctionOutput,它会传递给回调函数callbackFunction

如何传递另一个对象(例如globalObject)以便在回调函数callbackFunction中使用?

不幸的是第三方库已编译好,所以我无法对其进行任何更改。

#include <stdio.h>
#include "library.h"

int callbackFunction(int libraryFunctionOutput):
    printf("%s, %d", libraryFunctionOutput, globalObject);
    return 1;

int main(int argc, char* argv[])
{
   int globalObject = 0;
   libraryFunction(callbackFunction);
}

在文档中,该功能显示为:

int __stdcall libraryFunction(const char*    filename,
                              unsigned int   flags,
                              int            userID,
                              MathrelCallback callbackFunction);

MathrelCallback结构定义如下:

struct MathrelCallback {MathrelHeader header;
                        MathrelInfo   data;
                        unsigned int Type;
};

1 个答案:

答案 0 :(得分:1)

如果库真的需要一个函数指针(不是像std :: function这样的通用Callable),并且不提供将上下文或用户指针传递给回调的功能,那么你必须使全局对象成为全局对象(全部它的缺点):

#include <stdio.h>
#include "library.h"

static int globalObject = 0;

int callbackFunction(int libraryFunctionOutput)
{
    printf("%s, %d", libraryFunctionOutput, globalObject);
    return 1;
}

int main(int argc, char* argv[])
{
   libraryFunction(callbackFunction);
}