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 *'로 캐스트 할 수 없습니다. 제 3 자 라이브러리 API의 버그입니다. 어쨌든 함수 호출 포인터를 한 호출 규칙 (__stdcall)에서 다른 포인터 (__cdecl)로 변환 할 수는 없습니다. – Cameron