动态链接库中创建线程失败
本人菜菜鸟,想在动态链接库中创建线程,发现失败了。请各位帮帮忙。。{:5_92:}
unsigned int __stdcall MyFunc(void *pParam)
{
MessageBox(NULL, TEXT("启动线程成功!"), TEXT("提示"), MB_OK);
return 0;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORDul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
_beginthreadex(NULL, 0, MyFunc, NULL, 0, NULL);
MessageBox(NULL, TEXT("成功载入动态链接库"), TEXT("提示"), MB_OK);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
MessageBox(NULL, TEXT("成功卸载动态链接库"), TEXT("提示"), MB_OK);
break;
}
Sleep(1);
return TRUE;
} 本帖最后由 无符号整形 于 2016-11-5 08:37 编辑
my_angel 发表于 2016-11-5 08:31
啥意思?
我对这个最熟悉了,居然没召唤我~{:10_254:}@拈花小仙
#include <Windows.h>
HINSTANCE g_hModule;
DWORD WINAPI MyFunc(LPVOID pParam)
{
MessageBox(NULL, TEXT("启动线程成功!"), TEXT("提示"), MB_OK);
Sleep(2000);
return 0;
}
BOOL APIENTRY DllMain(HMODULE hModule,
DWORDul_reason_for_call,
LPVOID lpReserved
)
{
DWORD ThreadID;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g_hModule = hModule;
if (CreateThread(NULL, 0, MyFunc, NULL, 0, &ThreadID) == NULL)
{
MessageBox(NULL, TEXT("Error"), TEXT("提示"), MB_OK);
}
MessageBox(NULL, TEXT("成功载入动态链接库"), TEXT("提示"), MB_OK);
break;
case DLL_THREAD_ATTACH:
MessageBox(NULL, TEXT("成功创建线程。"), TEXT("提示"), MB_OK);
break;
case DLL_THREAD_DETACH:
MessageBox(NULL, TEXT("线程退出。"), TEXT("提示"), MB_OK);
break;
case DLL_PROCESS_DETACH:
MessageBox(NULL, TEXT("成功卸载动态链接库"), TEXT("提示"), MB_OK);
break;
}
return TRUE;
} 美女求帮忙 @拈花小仙
最后是不是应该return 0;吧{:5_94:} alltolove 发表于 2016-11-5 07:52
最后是不是应该return 0;吧
啥意思?{:5_96:} 本帖最后由 my_angel 于 2016-11-5 09:10 编辑
无符号整形 发表于 2016-11-5 08:34
我对这个最熟悉了,居然没召唤我~@拈花小仙
#include <process.h>
#include <stdio.h>
#include <Windows.h>
unsigned int __stdcall MyFunc(void *arg)
{
printf("+++++启动线程成功!++++\n");
MessageBox(NULL, TEXT("启动线程成功!"), TEXT("提示"), MB_OK);
return 0;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORDul_reason_for_call,
LPVOID lpReserved
)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
printf("===== 加载动态链接库,并创建子线程 =====\n");
_beginthreadex(NULL, 0, MyFunc, NULL, 0, NULL);
break;
case DLL_PROCESS_DETACH:
printf("===== 卸载动态链接库 =====\n");
break;
case DLL_THREAD_ATTACH:
printf("===== DLL_THREAD_ATTACH 被触发 =====\n");
break;
case DLL_THREAD_DETACH:
printf("===== DLL_THREAD_DETACH 被触发 =====\n");
break;
}
return true;
}
把代码这样写就正常了,但是把子线程执行到MessageBox好像停住了,DLL_THREAD_DETACH也没有被触法,究竟啥回事,知道吗? 无符号整形 发表于 2016-11-5 08:34
我对这个最熟悉了,居然没召唤我~@拈花小仙
发现问题了, 原来是主线程关闭了,导致进程关闭,子线程还没执行完就被迫结束。
犯傻了。。。
分就给你了,谢谢啦
页:
[1]