gpt4 book ai didi

c++ - 64 位 DLL 中的 CreateThread 不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 07:32:49 25 4
gpt4 key购买 nike

我有一个 32 位和一个 64 位可执行文件。两者都加载一个相同位的 DLL,就像在 64 位可执行文件中加载一个 64 位 dll。无论如何,32 位 DLL 工作完美,它创建一个线程并弹出一个 hello world 消息框。然而,对于 64 位 DLL,那段代码永远不会执行。就像createthread失败了。

    case DLL_PROCESS_ATTACH:
myFunc();
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

void myFunc()
{

HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&MyThread, NULL, 0, NULL);
}

DWORD WINAPI MyThread(LPVOID param)
{
MessageBoxA(0, "HELLO 64", 0,0);
ExitThread(0);
}

这些是 DLL 中的一些片段。我用谷歌搜索了一下,我能想到的是堆栈对齐失败了?如果这是原因,我该如何正确调用 CreateThread 使其工作?如果那不是原因,有谁知道可能出了什么问题?

如有任何帮助,我将不胜感激,在此先致谢!

最佳答案

您对 MyThread 的签名有误。你不应该转换它,你应该确保你的函数与签名匹配。正确的代码是:

CreateThread(NULL, 0, MyThread, NULL, 0, NULL);

DWORD WINAPI MyThread(LPVOID param)
{
// etc
}

除此之外,你不应该在你的 DllMain 中做任何事情作为 @GSerg 评论,因为当你在那里时有一个锁被持有。通过执行任何复杂的操作,您可能会无意中加载另一个 DLL,从而导致死锁。

相反,您通常会在 DLL 中有一个单独的初始化函数,您的调用代码可以在加载 DLL 后调用该函数。

关于c++ - 64 位 DLL 中的 CreateThread 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12014085/

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