【问题标题】:QtConcurrent::run() doesn't accept __stdcall/WINAPI functionQtConcurrent::run() 不接受 __stdcall/WINAPI 函数
【发布时间】:2013-07-02 14:54:59
【问题描述】:

我尝试使用QtConcurrent::run() 执行具有__stdcall 调用约定的DLL 函数,但出现编译错误。

我已将问题简化为以下示例代码:

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

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

【问题讨论】:

    标签: c++ qt compiler-errors stdcall qtconcurrent


    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      • 1970-01-01
      相关资源
      最近更新 更多