ошибка C2440: «приведение типа»: невозможно преобразовать из «перегруженной функции» в «void (__cdecl *) (void)» - PullRequest
0 голосов
/ 10 декабря 2010

У меня есть плагин, который определяет установщик обратного вызова следующим образом:

extern "C" __declspec(dllexport) void set_callback(void (*fn)(void));

и класс вызывающего модуля плагина, написанный на управляемом C ++, который ссылается на обратный вызов:

typedef void (CALLBACK* _set_callback)(void (*fnc)(void));

public ref class Caller {
    static void changeHandler(void);
}

void Caller::register() {
    _set_callback callback;
    callback((void (__cdecl *)(void))changeHandler);
}

Все работает нормально, пока changeHandler(void) не будет определен как статический метод. Как изменить его для работы нестатическим методом?

1 Ответ

1 голос
/ 10 декабря 2010

Редактировать: Похоже, я неправильно понял вопрос.Учитывая текущее объявление set_callback, вы не можете удалить модификатор static - это сделало бы его функцией-членом (для которой требуется объект, с которым нужно работать), и вы не можете передать указатель на функцию-член в функциюэто берет только нормальный указатель на функцию.

...