簡體   English   中英

對話框 wIndow 打不開

[英]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 才能工作。 最后,過程會這樣做(我跳過了一些步驟):

  1. 我制作了一個“緩沖區”變量 szfile(具有 260 個字符的數組 bc MAX_PATH 解析為該)

  2. 它產生了一種指向數組的引用(類似於指針)[即“NameOfFile.lpstrFile”]

  3. 它在 if 語句中調用 function 並打開對話框 window

  4. 選擇 function 后,“GetOpenFileName”將文件名和路徑保存在 szFile(TCHAR - 數組)中並將其轉換回 LPWSTR [if 語句中編寫的代碼]

  5. 你得到了你的東西,可以繼續

謝謝大家的幫助

如果此項目被編譯為 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM