关于网友提出的“ 驱动DLL中调用MessageBox出错”问题疑问,本网通过在网上对“ 驱动DLL中调用MessageBox出错”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 驱动DLL中调用MessageBox出错描述:
dll
项目是个虚拟打印机,在驱动实现的DLL中,需要弹出一个保存对话框,一下是代码,
static OPENFILENAME ofn;
TCHAR strFile[500]={0};
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = NULL;
ofn.hInstance = NULL;
ofn.lpstrFilter = lpszFilter;
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 0;
ofn.lpstrFile = strFile;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = MAX_PATH;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = lpszTitle;
ofn.Flags = OFN_HIDEREADONLY;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lpstrDefExt = NULL;
ofn.lCustData = 0;
ofn.lpfnHook = NULL;
ofn.lpTemplateName = NULL;
if( 0 != GetSaveFileName(&ofn))
{
SetFileName(strFile);
}
在Win7 32位系统下,附加到Notepad.exe,跟踪调试,是一切正常.
但是在Win7 64位和Win8系统中,附加到Notpad.exe跟踪调试,只会加载,但是不会进入到内部实现.附加到spoolsv.exe,调试正常,但是一旦运行到GetSaveFileName,就直接跳出来,调试直接结束,并且没有任何异常,焦点在Notpad.exe窗口上,
然后用Messagebox做测试,猜想可能是因为没有父窗口的原因,所以一下几个都试了
MessagBox(NULL,"test","test",MB_OK);
MessageBox(GetDesktopWindow(),"test","test",MB_OK);
但都没有效果.