我正在尝试创建一个线程来处理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 buffer,reinterpret_cast
等,但错误仍然存在。如何解决这个问题?
答案 0 :(得分:1)
你正在寻找错误的地方。编译器抱怨第三个参数,即线程程序。您的错误看起来像GCCish,并且说明了错误传递参数3 ...
要修复它,你需要一个实际匹配函数的函数签名(这是LPTHREAD_START_ROUTINE
typedef的扩展版本),即:
DWORD (WINAPI *lpStartAddress)(LPVOID)
您定义的三个问题是:
__stdcall
)调用约定。std::string
参数,而不是LPVOID
(A.K.A。void *
)。this
参数,从而导致签名不匹配。