Я пытался выполнить функцию DLL, которая имеет __stdcall
соглашение о вызовах с использованием QtConcurrent::run()
, но я получаю ошибки компиляции.
Я уменьшил проблему до этого примера кода:
__stdcall void dllFunc() {
qDebug() << "test";
}
void test() {
QtConcurrent::run(dllFunc);
}
Если я удалю __stdcall
код компилируется и работает нормально. В противном случае я получаю эти ошибки компиляции:
error: invalid conversion from 'void (*)()' to 'void (*)()'
error: initializing argument 1 of 'QFuture<T> QtConcurrent::run(T (*)()) [with T = void]'
Почему это происходит, и какой лучший обходной путь?
Что ж, для обхода проблемы я использовал функцию-оболочку с той же сигнатурой, но без __stdcall
конвенции:
__stdcall int dllFunc(int param1, void *param2) {
qDebug() << "test";
return 0;
}
int dllFuncWrapper(int param1, void *param2) {
return dllFunc(param1, param2);
}
void test() {
QtConcurrent::run(dllFuncWrapper);
}
Других решений пока нет …