createThread字符串到lpVoid

CreateThread string to LPVOID

本文关键字:lpVoid 字符串 createThread      更新时间:2023-10-16

我正在尝试制作一个线程来处理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长unsigned int()(void )}'|

我尝试了几件事 - 通过参考,写入缓冲区, reinterpret_cast等,但错误仍然存在。如何解决此问题?

您正在寻找错误的位置。编译器正在抱怨第三个参数,即线程过程。您的错误看起来GCCISH,这说明了通过参数3 ...

错误的行为。

要修复它,您需要一个函数签名,该函数签名实际上与功能所采用的功能(这是LPTHREAD_START_ROUTINE TypeDef的扩展版本),即:

DWORD (WINAPI *lpStartAddress)(LPVOID)

您定义的三个问题是:

  1. 您的功能不使用winapi(又称__stdcall)调用约定。
  2. 您的功能具有std::string参数而不是LPVOID(又称void *)。
  3. 您的功能是班级成员。您需要一个静态成员或一个免费功能,以便不要期望额外的this参数,从而导致签名不匹配。