繁体   English   中英

CreateThread字符串转换为LPVOID

[英]CreateThread string to LPVOID

我正在尝试创建一个线程来处理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等,但是错误仍然存​​在。 如何解决这个问题?

您正在寻找错误的位置。 编译器抱怨第三个参数,线程过程。 您的错误看起来像是GCCish,这表明在Error的意义上传入了参数3 ...

要解决此问题,您需要一个实际上与功能需要匹配的功能签名(这是LPTHREAD_START_ROUTINE typedef的扩展版本),即:

DWORD (WINAPI *lpStartAddress)(LPVOID)

您定义的三个问题是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM