正规dll,在InitInstance()中开线程
AfxBeginThread(RUNTIME_CLASS(WatchThread));
线程执行后就死锁。怎么办?盼高手解答
AfxBeginThread(RUNTIME_CLASS(WatchThread));
线程执行后就死锁。怎么办?盼高手解答
解决方案 »
- 我如果把所有创建的类都以Object为基类,和以其他的为基类有什么区别吗?
- 我写了一个.sys驱动程序,如何在客户的机子上安装,并能让我的应用程序访问到?
- 我自己写的一个使用了6年的动态数组管理类,刚提交到codeproject上,欢迎大家捧场!
- 关于动态创建可编辑的静态文本控件问题
- 我在所有的板块都无法回复。。。。
- dll中显示对话框的问题
- 有关开放源码的问题?欢迎大家讨论…
- 请问;如何在对话框中点击按钮弹出一个矩形框?
- 有关找特定窗口的一堆问题
- 想用ZMPC OPC SERVER读取安川CP317数据怎么操作?
- CListCtrl控件中实现:一次选中所有ITEM
- 如何实现,在CLIST控件中实现:一次选中所有ITEM?
可以吗?因为我做的是一个远程注入,我的想法是把控制端把LoadLibrary和dll文件路径写入宿主进程,然后LoadLibrary我的dll。因此我需要在dll初始化时就可以开线程。
加我qq好吗?在qq上请教比较方便。qq 249105822
是 DisableThreadLibraryCalls。使用这个就可以在 DLL_PROCESS_ATTACH 中创建线程了。不行啊:(
你看我这样对吗?
CWatchApp::InitInstance() //CWatchApp是用MFC向导建立的正规dll工程。
{
CString dllName//dll的路径
::GetModuleFileName(AfxGetApp()->m_hInstance,dllName.GetBufferSetLength
(MAX_PATH+1),MAX_PATH);
dllName.ReleaseBuffer();
int nPos=dllName.ReverseFind('\\');
dllName=dllName.Left(nPos);
dllName+="\\Watch.dll"; HMODULE dllModule=NULL;
BOOL bOK=FALSE;
dllModule=::GetModuleHandle(dllName);
if(dllModule!=NULL)
bOK=::DisableThreadLibraryCalls(dllModule);
if(bOK)
AfxBeginThread(RUNTIME_CLASS(WatchThread)); //WatchThread是我要开的线程。
}测试程序只有一行代码:
就是::LoadLibrary(dll);
每次执行到开线程的地方,就死了。
只要保证初始化是线程安全的,在初始化时也可以开线程啊...不懂,什么意思。能解释一下吗?
>> bOK=::DisableThreadLibraryCalls(dllModule);DllModule 是本身Dll的Handle.不是其他的Dll.
我的dllModule是本身Dll的Handle.我加载的就是Watch.dll,也是在Watch.dll初始化时调用
Watch.dll的线程函数创建线程。
dll初始化时可以创建函数。但是不能用mfc的AfxBeginThread。
要用_beginthreadex就可以。谢谢以上各位的解答。