windows – GetOpenFileName在64位失败,但在32Bit中工作?
发布时间:2020-12-14 05:46:17 所属栏目:Windows 来源:网络整理
导读:我有以下代码,我用来使用Win32 API打开文件打开对话框.它在32位工作正常,但在64位(在DLL中)使用时失败.我究竟做错了什么? char Filestring[256];Filter = "OBJ files *.obj ";char* returnstring = NULL;OPENFILENAME opf;opf.hwndOwner = mainHWND;opf
我有以下代码,我用来使用Win32 API打开文件打开对话框.它在32位工作正常,但在64位(在DLL中)使用时失败.我究竟做错了什么?
char Filestring[256]; Filter = "OBJ files *.obj "; char* returnstring = NULL; OPENFILENAME opf; opf.hwndOwner = mainHWND; opf.lpstrFilter = Filter; opf.lpstrCustomFilter = 0; opf.nMaxCustFilter = 0L; opf.nFilterIndex = 1L; opf.lpstrFile = Filestring; opf.lpstrFile[0] = ' '; opf.nMaxFile = 256; opf.lpstrFileTitle = 0; opf.nMaxFileTitle=50; opf.lpstrInitialDir = Path; opf.lpstrTitle = "Open Obj File"; opf.nFileOffset = 0; opf.nFileExtension = 0; opf.lpstrDefExt = "*.*"; opf.lpfnHook = NULL; opf.lCustData = 0; opf.Flags = (OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT) & ~OFN_ALLOWMULTISELECT; opf.lStructSize = sizeof(OPENFILENAME); if(GetOpenFileName(&opf)) { returnstring = opf.lpstrFile; if (returnstring) { result = returnstring; } } 编辑:失败,我的意思是打开文件对话框没有显示.代码仍返回零,没有任何错误. 编辑2:我已调用CommDlgExtendedError()并返回1.从MSDN引用,是否表示对话框具有无效的lStructSize?我检查了sizeof(OPENFILENAME)并返回了140个字节. 更新:在我的项目设置中,在代码生成下,“结构成员对齐”设置为4字节(/ Zp4).我将其更改为默认值并且神奇地工作了.有关详细信息,请查看下面的答案及其评论. 解决方法
您没有初始化lpTemplateName,因此它包含随机堆栈噪声.这反过来将导致’hInstance`成为也包含堆栈噪声的引用.
调用这样的函数时,首先应该将结构清零,只填写非零的字段.像这样的东西: OPENFILENAME opf={0}; opf.lStructSize = sizeof(OPENFILENAME); opf.hwndOwner = mainHWND; opf.lpstrFilter = Filter; opf.nFilterIndex = 1L; opf.lpstrFile = Filestring; opf.lpstrFile[0] = ' '; opf.nMaxFile = 256; opf.lpstrInitialDir = Path; opf.lpstrTitle = "Open Obj File"; opf.lpstrDefExt = "*.*"; opf.Flags = OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT; 没有必要明确排除OFN_ALLOWMULTISELECT,因为你没有首先包含它! 编辑 您在评论中声明这不起作用.调用CommDlgExtendedError是一个好主意,应该告诉你它失败的原因. 您还可以尝试运行最小可能的GetOpenFileName,这是: char Filestring[MAX_PATH] = " "; OPENFILENAME opf={0}; opf.lStructSize = sizeof(OPENFILENAME); opf.lpstrFile = Filestring; opf.nMaxFile = MAX_PATH; GetOpenFileName(&opf); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何估算Windows Azure Table存储查询性能?
- 域名系统 – Windows Server – DHCP / DNS更新 – 清除过时
- Windows – Win32 EXCEPTION_INT_OVERFLOW与EXCEPTION_INT_
- iis-7 – 如何在Vista上重新安装iis 7.0 CLEAN?
- windows – 疯狂的想法:当它是一个黑盒子时,确定系统是否空
- .net – 从开发角度来看:如何让老板们升级到Vista / Windo
- 更改Windows任务管理器中的进程优先级是否会导致问题?
- .net – System.Serializable属性在Windows 10的UWP应用程序
- windows – 如何在ADUC和GPMC之间链接GP对象和AD对象?
- winapi – Win32:写入文件不缓冲?
推荐文章
站长推荐
- 当密码包含“@”符号时,在Windows上使用Git无法正
- windows-server-2008 – 事件36888:生成以下致命
- 机器人 – 与Microsoft bot builder和microsoft
- 什么是将服务器添加到RDS的服务器池的PowerShell
- 如何处理大于UInt64(C#)的数字
- com – 在不同位置使用激活上下文API和许多dll
- 审计 – 是否可以从一组Windows计算机中检索系统
- windows-server-2008 – 向Jr. SysAdmin解释当PC
- 在Windows上使用NodeJS上的path.join创建URL
- Windows计算机上SFTP服务器的选项
热点阅读