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 に答える