gpt4 book ai didi

windows - GetOpenFileName 在 64 位中失败,但在 32 位中有效?

转载 作者:可可西里 更新时间:2023-11-01 13:51:03 25 4
gpt4 key购买 nike

我有以下代码,用于使用 Win32 API 打开文件打开对话框。它在 32 位中运行良好,但在 64 位(在 DLL 中)中使用时失败。我做错了什么?

 char Filestring[256];
Filter = "OBJ files\0*.obj\0\0";
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] = '\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] = '\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] = "\0";
OPENFILENAME opf={0};
opf.lStructSize = sizeof(OPENFILENAME);
opf.lpstrFile = Filestring;
opf.nMaxFile = MAX_PATH;
GetOpenFileName(&opf);

关于windows - GetOpenFileName 在 64 位中失败,但在 32 位中有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4982680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com