1

我的代码如下。

OPENFILENAMEA open;
ZeroMemory(&open, sizeof(open));

open.lStructSize = sizeof(LPOPENFILENAMEA);
open.lpstrFilter = "Képek\0*.jpg;*.jpeg;*.gif;*.png;*.bmp\0\0";
open.nFileOffset = 1;
open.lpstrFile[0] = '\0';
open.nMaxFile = 2048;
open.lpstrTitle = "Képek kiválasztása..";
open.Flags = OFN_ALLOWMULTISELECT | OFN_FILEMUSTEXIST;

OPENFILENAME selected = GetOpenFileName(open);

我的问题是,我在尝试构建时收到以下错误: error: cannot convert 'OPENFILENAME {aka tagOFNA}' to 'LPOPENFILENAMEA {aka tagOFNA*}' for argument '1' to 'BOOL GetOpenFileNameA(LPOPENFILENAMEA)'当我打电话时GetOpenFileName

如果我用 open 参数作为 ptr 调用它,GetOpenFileName(&open)我会得到以下信息error: conversion from 'BOOL {aka int}' to non-scalar type 'OPENFILENAME {aka tagOFNA}' requested

问题:做什么?

4

2 回答 2

3

GetOpenFileName返回一个BOOL,而不是一个OPENFILENAME

如果用户选择文件并单击“确定”返回,它将返回非零值。如果他们单击“取消”,它将返回 0。

如果它返回 true,它将修改您的内容open以反映用户选择的内容。

所以,你通常使用它:

if (GetOpenFileName(&open)) {
    // use open.whatever to get data about the selected file
}
else
   // The user clicked cancel -- typically do nothing.
于 2013-07-20T15:16:20.740 回答
1

试试这个:

BOOL selected = GetOpenFileName(&open);

我不熟悉 WinAPI,但请查看错误消息:

错误:无法将参数 '1' 的 'OPENFILENAME {aka tagOFNA}' 转换为 'LPOPENFILENAMEA {aka tagOFNA*}' 到 'BOOL GetOpenFileNameA(LPOPENFILENAMEA)'

意味着您应该将指针OPENFILENAME作为参数传递给GetOpenFileName.

错误:请求从“BOOL {aka int}”转换为非标量类型“OPENFILENAME {aka tagOFNA}”

表示返回类型GetOpenFileName应该是BOOL

于 2013-07-20T15:16:16.270 回答