关于 DLL 调用 CreateThread就崩溃
#include<windows.h>DWORDWINAPIThreadProc(LPVOIDlpParameter//threaddata){MessageBox(NU...
#include <windows.h>
DWORD WINAPI ThreadProc(
LPVOID lpParameter // thread data
)
{
MessageBox(NULL,"PK","",0);
return 0;
}
BOOL WINAPI DllMain(HINSTANCE p1, DWORD p2, LPVOID p3)
{
switch (p2)
{
case DLL_PROCESS_ATTACH:
HANDLE hjkhk;
DWORD charID;
hjkhk=CreateThread(NULL,0, ThreadProc,NULL,0,&charID);//执行这个函数宿主程序就崩溃 线程子程序什么代码也没有也会崩溃
//把CreateThread注释了 加个MessageBox(NULL,"PK","",0);就不会出错
//
// CloseHandle(hjkhk);
default:
;
}
return 0;}
你们说的有理
.... 展开
DWORD WINAPI ThreadProc(
LPVOID lpParameter // thread data
)
{
MessageBox(NULL,"PK","",0);
return 0;
}
BOOL WINAPI DllMain(HINSTANCE p1, DWORD p2, LPVOID p3)
{
switch (p2)
{
case DLL_PROCESS_ATTACH:
HANDLE hjkhk;
DWORD charID;
hjkhk=CreateThread(NULL,0, ThreadProc,NULL,0,&charID);//执行这个函数宿主程序就崩溃 线程子程序什么代码也没有也会崩溃
//把CreateThread注释了 加个MessageBox(NULL,"PK","",0);就不会出错
//
// CloseHandle(hjkhk);
default:
;
}
return 0;}
你们说的有理
.... 展开
4个回答
展开全部
微软官方已经说了:
http://support.microsoft.com/kb/142243/en-us
至于解决案呢,上面也提到了
就是不建议在 DllMain 中的 DLL_PROCESS_ATTACH 情况下去创建新线程
可以把一个函数导出去,让exe在外部去调用,这是个不错的方法
http://support.microsoft.com/kb/142243/en-us
至于解决案呢,上面也提到了
就是不建议在 DllMain 中的 DLL_PROCESS_ATTACH 情况下去创建新线程
可以把一个函数导出去,让exe在外部去调用,这是个不错的方法
展开全部
加载库的时候不能创建线程。
可以这么理解,因为加载库的时候,实际上这个段空间的环境还没有初始化完全,这时候再申请资源会导致内核级异常。
可以这么理解,因为加载库的时候,实际上这个段空间的环境还没有初始化完全,这时候再申请资源会导致内核级异常。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CreateThread不安全,建议使用
_beginthread
_beginthread
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
同意楼上两位
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询