我正在尝试创建一个线程来处理ZIP归档:
HANDLE hThread = CreateThread(
NULL,
0,
ZipProcess,
(LPVOID) cmdline.c_str(),
0,
NULL);
我在
lpParameter
中将命令行参数作为字符串传递。我不断收到此错误:
...类型为'void(MyClass ::)(std :: string){
(MyClass ::)(std :: basic_string)}'不匹配
'LPTHREAD_START_ROUTINE {aka long unsigned int()(void)}'|
我已经尝试了几件事-通过引用,writing to a buffer,
reinterpret_cast
等传递,但是错误仍然存在。如何解决这个问题? 最佳答案
您正在寻找错误的位置。编译器抱怨第三个参数,线程过程。您的错误看起来像是GCCish,这表明在Error的意义上传入了参数3 ...
要解决此问题,您需要一个实际上与功能需要匹配的功能签名(这是LPTHREAD_START_ROUTINE
typedef的扩展版本),即:
DWORD (WINAPI *lpStartAddress)(LPVOID)
您定义的三个问题是:
您的函数不使用WINAPI(A.K.A
__stdcall
)调用约定。您的函数具有
std::string
参数而不是LPVOID
(A.K.A. void *
)。您的职能是班级成员。您需要一个静态成员或一个自由函数,以使其不期望使用其他
this
参数,从而导致签名不匹配。