如何在第三方库调用的回调函数中传递/使对象/变量可访问
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);
}
相关文章:
- 按基类对象访问派生类资源时出错
- 使用基类对象访问派生的仅类方法
- 从 const 对象访问非 const 方法
- 如何在C++中使用类对象访问指针数据成员
- 如何通过不同的指针使用类的对象访问结构?(链表)(C++)
- 使用二进制搜索树中的迭代器对象访问左侧节点
- 为什么引用类型在使用临时对象访问时是左值
- 从父对象 c++ 访问子方法
- 无法通过指针或对象 c++ 访问受保护的成员
- 为什么可以从类中的对象访问类的私有变量
- 对类似"struct {double, int}"对象使用reinterpret_cast进行对象访问
- 通过无符号 char 别名进行对象访问,加载和存储时会发生什么?
- 从对象访问结构枚举
- 如何全局创建对象并使用该对象访问全局范围内的公共成员函数
- 在C 中,可以从第三个共享对象访问其他两个不同共享对象
- 如何在C 中提供一个可呼叫的对象访问,例如lambda
- C 向量对象访问
- C++是否可以从同级第二个派生对象访问第一个派生对象的受保护基础数据成员?
- 如何从类内实例化的对象访问私有变量
- 多态性:通过类文本或对象访问静态成员