首页
社区
课程
招聘
[求助]创建远程线程,执行loadlibraryA加载目标DLL,DLL窗口不显示,以下代码哪里出错了?
2023-10-30 11:32 2243

[求助]创建远程线程,执行loadlibraryA加载目标DLL,DLL窗口不显示,以下代码哪里出错了?

2023-10-30 11:32
2243

主要是MFC DLL 初始化函数附近写的代码可能有问题。
我是在DLL InitInstance 函数里 ,执行创建线程的代码,用子线程来执行SeeWindow函数,完成弹出DLL窗口。
返回值显示 创建线程成功。但是看不到DLL窗口。
只弹出一个操作报告:

DLL InitInstance函数附近的代码如下:

// 唯一的 CMFCLibrary3App 对象

CMFCLibrary3App theApp;

TEST* Dialog;//窗口绑定的类名为 TEST
void SeeWindow(void)
{
    TEST* Dialog= new TEST;
    Dialog->DoModal();
   //delete Dialog;
    //FreeLibraryAndExitThread(theApp.m_hInstance,1);
}
// CMFCLibrary3App 初始化
BOOL CMFCLibrary3App::InitInstance()
{
    CWinApp::InitInstance();
    if (!::CreateThread(0, 0, (LPTHREAD_START_ROUTINE)SeeWindow, 0, 0, 0))
   {
        MessageBoxA(0,"新建线程失败!","标题",0);
        return 0;
   }
    MessageBoxA(0, "新建线程成功!", "标题", 0);
    return TRUE;
}
以上代码是哪里出问题了吗?


阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

最后于 2023-10-30 11:40 被WYYZCAYQ编辑 ,原因: 格式对齐
收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 22188
活跃值: (3702)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
huangyalei 2023-10-30 12:16
2
0
有可能线程创建起来后锁死了
https://blog.csdn.net/tianjian789/article/details/51459469
雪    币: 8132
活跃值: (5330)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
mudebug 2023-10-30 12:39
3
0
mfc的老古董有个资源切换的玩意,因为你注入。他跑去读取exe的资源目录了,你得切换到自己这个dll上。然后再创建窗口
雪    币: 1431
活跃值: (1131)
能力值: ( LV3,RANK:23 )
在线值:
发帖
回帖
粉丝
Black貓①呺 2023-10-30 13:48
4
0
SeeWindow 里面 while(true) Sleep(100);  挂调试器以后慢慢调
雪    币: 456
活跃值: (917)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cjshpzh 2023-10-30 14:26
5
0


CVC6App theApp;
CDlgUser *g_pDlgUser;//对话框指针

DWORD WINAPI LoadResDlg(LPVOID lpArg)
{
	if (g_pDlgUser == NULL)
	{
	    //下面这一句很重要 MFC的DLL资源对话框需要切换资源到DLL模块中查找资源
		AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
		g_pDlgUser = new CDlgUser;
		g_pDlgUser->Create(IDD_DLG_USER, NULL);
		g_pDlgUser->ShowWindow(SW_SHOW);
		g_pDlgUser->RunModalLoop();//模态对话框
		delete g_pDlgUser;
		g_pDlgUser = NULL;
	}
	Sleep(500);
	FreeLibraryAndExitThread(theApp.m_hInstance, 0);
	return 0;
}

BOOL CVC6App::InitInstance() 
{
	// TODO: Add your specialized code here and/or call the base class
	CloseHandle(::CreateThread(NULL, 0, LoadResDlg, NULL, 0, NULL));//创建线程
	return CWinApp::InitInstance();
}


最后于 2023-10-30 14:31 被cjshpzh编辑 ,原因:
雪    币: 232
活跃值: (542)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
WYYZCAYQ 2023-10-30 22:16
6
0
cjshpzh CVC6App theApp; CDlgUser *g_pDlgUser;//对话框指针 DWORD WINAPI Lo ...
谢谢帮助!可以了。
雪    币: 232
活跃值: (542)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
WYYZCAYQ 2023-10-30 22:17
7
0
谢谢上面大家的帮助!
游客
登录 | 注册 方可回帖
返回