Как передать / сделать объект / переменную доступными внутри функции обратного вызова, которая вызывается сторонней библиотекой?

Как сделать 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;
};

0

Решение

Если библиотека действительно берет указатель на функцию (а не обобщенный 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);
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]