[英]Dialog wIndow does not open
所以我想制作一種文本編輯器,並想使用對話框窗口從用戶那里獲取文件路徑/文件。 現在問題來了。 我在一個項目中遇到了一個錯誤,而在另一個項目中卻沒有,即使我沒有更改可以讓我斷定可能存在問題的設置。
#include <Windows.h>
#include <fstream>
#include <Windows.h>
#include <string>
#include <iostream>
#include <stdlib.h>
#include <commdlg.h>
using std::cout;
void getfile() {
OPENFILENAME NameOfFile;
ZeroMemory(&NameOfFile, sizeof(NameOfFile));
NameOfFile.lStructSize = sizeof(NameOfFile);
LPWSTR szFile{};
NameOfFile.lpstrFile = szFile;
NameOfFile.nMaxFile = sizeof(szFile);
NameOfFile.Flags = OFN_ALLOWMULTISELECT;
if (GetOpenFileName(&NameOfFile))
{
std::cout << szFile;
}
}
int main() {
getfile();
}
當我在一個項目中執行此操作時,錯誤“嚴重性代碼描述項目文件行抑制 state 錯誤(活動)E0513 類型“LPWSTR”的值無法分配給類型“LPSTR”的實體”
工作項目圖片
這里項目的設置不起作用
這是可以理解的,我嘗試了使用 LPTSTR 或 triying.c_str() 進行轉換的多種解決方法,但它不會起作用。 正如我所說,完全相同的代碼在另一個項目中編譯並運行良好
LPWSTR FILE{};
OPENFILENAME NameOfFile;
ZeroMemory(&NameOfFile, sizeof(NameOfFile));
NameOfFile.lStructSize = sizeof(NameOfFile);
TCHAR szFile[MAX_PATH];
NameOfFile.lpstrFile = szFile;
NameOfFile.nMaxFile = sizeof(szFile);
NameOfFile.Flags = OFN_ALLOWMULTISELECT;
if (GetOpenFileName(&NameOfFile))
{
FILE = (LPWSTR)szFile;
}
此處的代碼將打開一個對話框 window,目的是“打開”一個文件。 它將在變量 FILE 中保存文件名和路徑。
我的問題的答案是變量 szFile,它不能是 LPWSTR,但需要是對話框 window 才能工作。 最后,過程會這樣做(我跳過了一些步驟):
我制作了一個“緩沖區”變量 szfile(具有 260 個字符的數組 bc MAX_PATH 解析為該)
它產生了一種指向數組的引用(類似於指針)[即“NameOfFile.lpstrFile”]
它在 if 語句中調用 function 並打開對話框 window
選擇 function 后,“GetOpenFileName”將文件名和路徑保存在 szFile(TCHAR - 數組)中並將其轉換回 LPWSTR [if 語句中編寫的代碼]
你得到了你的東西,可以繼續
謝謝大家的幫助
如果此項目被編譯為 UNICODE,我們希望看到 NameOfFile.lpstrFile 的類型為LPWSTR
。
但是,如錯誤消息所示,它實際上是LPSTR
類型。
因此,錯誤E0513 A value of type ""LPWSTR"" cannot be assigned to an entity of type ""LPSTR"""
突出顯示這兩種類型不匹配。
有趣的是,屏幕截圖確實顯示已為所有構建選擇了 Unicode。
雖然此問題的確切原因尚不清楚,但此處的解決方案是將/D "_UNICODE" /D "UNICODE"
添加到配置屬性->C/C++->其他選項部分。
這將確保所有構建實際上都是使用 Unicode 選項編譯的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.