如何在第三方库调用的回调函数中 pass/make 一个 object/variable 可访问?

How to pass/make an object/variable accessible inside a callback function which is called by a third party library?

如何让 callbackFunction 可以访问 globalObject

我正在使用第三方库 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;
};

如果库真的采用函数指针(不是像 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);
}