CreateThread字符串为LPVOID

时间:2012-11-13 04:01:12

标签: c++ multithreading winapi process

我正在尝试创建一个线程来处理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 )}'|

我尝试了几件事 - 通过引用传递,writing to a bufferreinterpret_cast等,但错误仍然存​​在。如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

你正在寻找错误的地方。编译器抱怨第三个参数,即线程程序。您的错误看起来像GCCish,并且说明了错误传递参数3 ...

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

DWORD (WINAPI *lpStartAddress)(LPVOID)

您定义的三个问题是:

  1. 您的函数不使用WINAPI(A.K.A __stdcall)调用约定。
  2. 您的函数有一个std::string参数,而不是LPVOID(A.K.A。void *)。
  3. 您的职能是班级成员。您需要一个静态成员或一个自由函数,以便它不会产生额外的this参数,从而导致签名不匹配。