我试图使用QtConcurrent::run()执行一个具有__stdcall调用约定的动态链接库函数,但是我得到了编译错误。
我已经将问题简化为以下示例代码:
__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]'为什么会发生这种情况,最好的解决方法是什么?
发布于 2013-07-03 00:40:25
好吧,为了解决这个问题,我最终使用了一个具有相同签名但没有__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);
}https://stackoverflow.com/questions/17428846
复制相似问题