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 ) }'|

我已经尝试了几件事——通过引用传递、写入缓冲区、areinterpret_cast等,但错误仍然存​​在。如何解决这个问题?

4

1 回答 1

1

你找错地方了。编译器抱怨第三个参数,线程过程。您的错误看起来像 GCCish,这说明了错误在参数 3 中传递的内容...

要修复它,您需要一个与函数实际匹配的函数签名(这是LPTHREAD_START_ROUTINEtypedef 的扩展版本),即:

DWORD (WINAPI *lpStartAddress)(LPVOID)

您定义的三个问题是:

  1. 您的函数不使用 WINAPI (AKA __stdcall) 调用约定。
  2. 您的函数有一个std::string参数,而不是LPVOID(AKA void *)。
  3. 您的函数是类成员。您需要一个静态成员或一个自由函数,以免它期望额外的this参数,从而导致签名不匹配。
于 2012-11-13T04:11:09.143 回答