Как сделать 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;
};
Если библиотека действительно берет указатель на функцию (а не обобщенный Callable, такой как std :: function) и не предлагает возможность передать контекстный или пользовательский указатель на ваш обратный вызов, вы должны сделать свой глобальный объект глобальным (со всеми его недостатками) :
#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);
}
Других решений пока нет …