如何在第三方库调用的回调函数中 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
,它有一个方法 libraryFunction
。 libraryFunction
的输出是一个 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);
}
如何让 callbackFunction
可以访问 globalObject
?
我正在使用第三方库 library.h
,它有一个方法 libraryFunction
。 libraryFunction
的输出是一个 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);
}