Как сделать globalObject
Доступен callbackFunction
?Как передать/сделать объект/переменную доступной внутри функции обратного вызова, которая вызывается сторонней библиотекой?
Я пользуюсь сторонней библиотекой 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;
};
Что такое подпись 'libraryFunction'? Если он примет лямбда, ответ будет тривиален. Не знаю, возможно ли это, если он принимает только указатели на функции, за исключением того, что копирует 'globalObject' в глобальной переменной. – Franck
Большинство API-интерфейсов C также передают указатель контекста. Вы должны использовать это для контекста. – krzaq
@Franck Я добавил, как выглядит библиотека в документации. Я не думаю, что он принимает лямбду. Я доволен глобальным объектом в глобальной переменной, так как это относительно небольшое приложение. @krzaq К сожалению, никакие другие контекстуальные аргументы не могут быть переданы внутри функции 'libraryFunction', а затем какая функция обратного вызова использовать. –