int callbackwrapper(const char*a, const char *b, void *ptr)
{
test *p = (test *)ptr;
p->callback(a, b);
}
является функцией-членом.Эта функция-член ищет ссылку на объект, которому она принадлежит.Таким образом, вышеприведенная функция выглядит примерно так:
int callbackwrapper(test* this, const char*a, const char *b, void *ptr)
{
test *p = (test *)ptr;
p->callback(a, b);
}
Скорее всего, registercallback не ожидает здесь функцию-член.
Это можно решить, сделав callbackwrapper
aстатическая функция-член:
static int callbackwrapper(const char*a, const char *b, void *ptr)
{
test *p = (test *)ptr;
p->callback(a, b);
}
Кроме того, не забывайте: если вы взаимодействуете с библиотекой C, и именно поэтому вам необходим обратный вызов, помните, что функции должны вызываться из Cнужно объявить extern "C"
, что заставит вас убрать эту функцию из класса и сделать ее
extern "C" int callbackwrapper(const char*a, const char *b, void *ptr)
{
test *p = (test *)ptr;
p->callback(a, b);
}