Я пытаюсь установить ссылку на внешнюю библиотеку в приложении QT. Внешняя библиотека имеет заголовочный файл со следующим соответствующим кодом я пытаюсь позвонить:Ошибка преобразования void (__ cdecl MyClass :: *)() в void *
extern VGRABDEVICE_API bool V_AssignFrameSizeCallback(IGrabChannel* pChannel, void* pFunc);
В программе демо C++ при условии, что никаких проблем не компиляции, следующий соответствующий код является:
// in main.cpp
void _stdcall MyFrameSizeCallback(T x) {
do_stuff;
}
int main(int argc, char* argv[]) {
IGrabChannel* pChannel0 = something;
V_AssignFrameSizeCallback(pChannel0, MyFrameSizeCallback);
}
Я пытаюсь включить этот код в свое приложение QT, но получаю проблемы. В моем mainwindow.cpp файле:
void _stdcall MainWindow::MyFrameSizeCallback(T x) {
do_stuff;
}
void MainWindow::someFunction() {
IGrabChannel* pChannel0 = something;
V_AssignFrameSizeCallback(pChannel0, &MainWindow::MyFrameSizeCallback);
}
Ошибка я получаю:
error: C2664: 'bool V_AssignFrameSizeCallback(IGrabChannel *,void *)' :
cannot convert argument 2 from 'void (__cdecl MainWindow::*)(T)' to 'void *'
There is no context in which this conversion is possible
Что мне нужно сделать? Благодарю.
Указатели функций не являются указателями данных и не могут быть отнесены к 'void *' (часто потому, что они больше, особенно с виртуальным наследованием). Это ошибка в API сторонней библиотеки. В любом случае вы не можете преобразовать указатель на функцию из одного вызова (__stdcall) в другой (__cdecl). – Cameron