gpt4 book ai didi

c++ - CreateThread 字符串到 LPVOID

转载 作者:行者123 更新时间:2023-11-28 07:52:54 24 4
gpt4 key购买 nike

我正在尝试创建一个线程来处理 ZIP 归档:

 HANDLE hThread = CreateThread(
NULL,
0,
ZipProcess,
(LPVOID) cmdline.c_str(),
0,
NULL);

我在 lpParameter 中将命令行参数作为字符串传递。

我一直收到这个错误:

...argument of type 'void (MyClass::)(std::string) {aka void (MyClass::)(std::basic_string)}' does not match 'LPTHREAD_START_ROUTINE {aka long unsigned int ()(void)}'|

我已经尝试了几种方法 - 通过引用传递,writing to a bufferreinterpret_cast 等,但错误仍然存​​在。如何解决这个问题?

最佳答案

你找错地方了。编译器提示第三个参数,线程过程。您的错误看起来像 GCC 风格,并且类似于 Error passing in argument 3...

要修复它,您需要一个与函数所采用的实际匹配的函数签名(这是 LPTHREAD_START_ROUTINE typedef 的扩展版本),即:

DWORD (WINAPI *lpStartAddress)(LPVOID)

您定义的三个问题是:

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

关于c++ - CreateThread 字符串到 LPVOID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13355408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com