此代码应该编译时没有错误,您应该将-lcomdlg32
链接到对话框。如果我使用指针,程序将返回0x22fcd8
或68
。并且应该(我认为)在对话框中返回文件用户类型的名称。
#include <windows.h>
#include <iostream>
int main() {
wchar_t szFileName[MAX_PATH] = {0};
OPENFILENAMEW ofn;
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFile = szFileName;
GetSaveFileNameW(&ofn);
using namespace std;
cout << szFileName << endl;
cout << *szFileName << endl; // also a number not a string
}
答案 0 :(得分:6)
如果要将wcout
数组作为以null结尾的宽字符串输出,则必须使用wchar_t
。
答案 1 :(得分:2)
cout
不支持wchar_t
或wchar_t*
,但它支持int
和void*
。编译器最终将wchar_t
转换为int,并将wchar_t*
降级为void*
。这就是为什么您看到cout
打印wchar_t
的数字值和wchar_t*
的内存地址。
请改用wcout
。它支持wchar_t
和wchar_t*
,因此它可以打印实际数据:
wcout << szFileName << endl;
wcout << *szFileName << endl;