2013-07-02 5 views
2

Я пытался выполнить функцию DLL, которая имеет соглашение о вызове __stdcall с использованием QtConcurrent::run(), но я получаю ошибки компиляции.QtConcurrent :: run() не принимает функцию __stdcall/WINAPI

Я уменьшил проблемы с этим примером кода:

__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]' 

Почему это происходит, и что является лучшим обходным решением?

ответ

1

Ну, для решения проблемы, я в конечном итоге, используя функцию-оболочку с той же подписью, но не __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); 
}