0

ZIPアーカイブを処理するスレッドを作成しようとしています。

 HANDLE hThread = CreateThread(
        NULL,
        0,
        ZipProcess,
        (LPVOID) cmdline.c_str(),
        0,
        NULL);

コマンドライン引数を文字列としてに渡しますlpParameter

私はこのエラーを受け取り続けます:

...タイプ'void(MyClass ::)(std :: string){aka void(MyClass ::)(std :: basic_string)}'の引数が'LPTHREAD_START_ROUTINE {aka long unsigned int( )(void)と一致しません}'|

参照による受け渡し、バッファへの書き込み、、など、いくつかのことを試しましreinterpret_castたが、エラーが解決しません。これを修正する方法は?

4

1 に答える 1

1

あなたは間違った場所を見ています。コンパイラは、3 番目の引数であるスレッド プロシージャについて不平を言っています。あなたのエラーはGCCのように見えます.それは引数3を渡すエラーの行に沿って何かを言います...

それを修正するには、関数が取るものと実際に一致する関数シグネチャが必要です (これはLPTHREAD_START_ROUTINEtypedef の拡張バージョンです)。

DWORD (WINAPI *lpStartAddress)(LPVOID)

あなたの定義の3つの問題は次のとおりです。

  1. __stdcall関数は WINAPI (AKA ) 呼び出し規約を使用しません。
  2. 関数には(AKA )std::stringの代わりにパラメーターがあります。LPVOIDvoid *
  3. 関数はクラス メンバーです。this署名の不一致を引き起こす追加の引数を期待しないためには、静的メンバーまたはフリー関数のいずれかが必要です。
于 2012-11-13T04:11:09.143 に答える