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长unsigned int()(void )}'|
我尝试了几件事 - 通过参考,写入缓冲区, reinterpret_cast
等,但错误仍然存在。如何解决此问题?
您正在寻找错误的位置。编译器正在抱怨第三个参数,即线程过程。您的错误看起来GCCISH,这说明了通过参数3 ...
的错误的行为。要修复它,您需要一个函数签名,该函数签名实际上与功能所采用的功能(这是LPTHREAD_START_ROUTINE
TypeDef的扩展版本),即:
DWORD (WINAPI *lpStartAddress)(LPVOID)
您定义的三个问题是:
- 您的功能不使用winapi(又称
__stdcall
)调用约定。 - 您的功能具有
std::string
参数而不是LPVOID
(又称void *
)。 - 您的功能是班级成员。您需要一个静态成员或一个免费功能,以便不要期望额外的
this
参数,从而导致签名不匹配。