2013-07-02 63 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); 
}