2

我试图使用 执行具有__stdcall调用约定的 DLL 函数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]'

为什么会发生这种情况,最好的解决方法是什么?

4

1 回答 1

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);
}
于 2013-07-02T16:40:25.490 回答