ATL DoModal 失败,返回-1

空持百千偈 2021-01-14 05:26:32
现象是这样的,出问题的是 一个用 ATL/WTL编的动态库, 暂时称之为B.dll
调用环境 , 有一个服务作为程序A的守护进程,IE通过 websocket之类的方法连接到程序A , A调用 动态库B.dll ,B执行相关函数,弹出界面。
通常情况下,界面时可以正常弹出的 。但是在个别用户 某次启动电脑后,B的界面就一直无法弹出了 , 直到重启电脑,或者重启程序A .
复现概率极低。出现问题的电脑有win7也有win10

通过日志等手段定位到了atl的DoModal处 具体说是 DialogBoxParam 返回-1 ,LastError = 0


调用代码
	CxxxDlg dlg;
INT_PTR Res = dlg.DoModal();





各位大神,请问有人遇到过类似的问题吗, 或者有什么建议吗,我实在是想不出有什么可能了
...全文
167 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
空持百千偈 2021-02-07
  • 打赏
  • 举报
回复
未解决,结贴了
空持百千偈 2021-01-15
  • 打赏
  • 举报
回复
而且用的ATL ,没有AFX相关函数和定义
空持百千偈 2021-01-15
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
可能是找不到所需的资源,日志中将传入的参数也做记录对比看看 试试添加一个 导出接口,调用这个导出接口

#include "TestDlg.h"

extern "C" __declspec( dllexport ) int TestDlg(HWND hParentWnd)
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState());

  CTestDlg dlg( CWnd::FromHandle(hParentWnd) );
  return (INT)dlg.DoModal();
}
谢谢版主,这个界面本来就有导出的接口,而且参数都是固定的啊 最主要的是测试环境无法复现, 估计出现问题也就父窗口句柄 和 资源文件了。父窗口句柄是0 也就是active window 是 NULL 话说什么情况会导致资源文件加载失败呢,通常情况下是可以的,出现概率应该不超过万分之十
zgl7903 2021-01-14
  • 打赏
  • 举报
回复
可能是找不到所需的资源,日志中将传入的参数也做记录对比看看 试试添加一个 导出接口,调用这个导出接口

#include "TestDlg.h"

extern "C" __declspec( dllexport ) int TestDlg(HWND hParentWnd)
{
  AFX_MANAGE_STATE(AfxGetStaticModuleState());

  CTestDlg dlg( CWnd::FromHandle(hParentWnd) );
  return (INT)dlg.DoModal();
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧