![](/img/trans.png)
[英]Error C2440 '<function-style-cast>': cannot convert from 'char' to 'std::string'
[英]Error C2664 '<function-style-cast>': cannot convert from 'CHAR [260]' to 'std::wstring'
我正在創建一個 c++ 項目,我在構建時不斷收到此錯誤。
錯誤 C2664 '':無法從 'CHAR [260]' 轉換為 'std::wstring'
這是我的 function 打電話
uint32_t exe_pid = util::find_process("ProgramName.exe");;
這是 function
uint32_t find_process(const std::string& Name) {
PROCESSENTRY32 ProcessEntry;
ProcessEntry.dwSize = sizeof(PROCESSENTRY32);
HANDLE ProcessSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (Process32First(ProcessSnapshot, &ProcessEntry)) {
do {
if (!_stricmp(ws2s(std::wstring(ProcessEntry.szExeFile)).c_str(), Name.data())) {
CloseHandle(ProcessSnapshot);
return ProcessEntry.th32ProcessID;
}
} while (Process32Next(ProcessSnapshot, &ProcessEntry));
}
CloseHandle(ProcessSnapshot);
return 0;
}
這是問題所在
std::wstring(ProcessEntry.szExeFile)
任何幫助,將不勝感激 !
您正在使用 Win32 API 函數的TCHAR
版本,並且您顯然是在關閉 UNICODE 的情況下編譯項目,因此:
TCHAR
映射到char
。Process32First()
function 映射到 ANSI Process32FirstA()
function。Process32Next()
function 映射到 ANSI Process32NextA()
function。PROCESSENTRY32
結構映射到 ANSI PROCESSENTRY32A
結構,因此它的szExeFile
字段是一個char[]
數組。 ws2s()
將std::wstring
作為輸入並返回std::string
。 但是std::wstring
沒有接受char[]
作為輸入的構造函數。 這就是您在std::wstring(ProcessEntry.szExeFile)
上收到編譯器錯誤的原因。
由於_stricmp()
將const char*
指針作為輸入,並且您的輸入Name
參數是std::string
1 ,並且您使用的是 API 的 ANSI 版本,因此您根本不應該調用ws2s()
。
1:因此,您應該直接使用 API 的 ANSI 版本,而不是 TCHAR 版本。
試試這個:
uint32_t find_process(const std::string& Name) {
PROCESSENTRY32A ProcessEntry;
ProcessEntry.dwSize = sizeof(PROCESSENTRY32);
HANDLE ProcessSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (ProcessSnapshot) {
if (Process32FirstA(ProcessSnapshot, &ProcessEntry)) {
do {
if (_stricmp(ProcessEntry.szExeFile, Name.c_str()) == 0) {
CloseHandle(ProcessSnapshot);
return ProcessEntry.th32ProcessID;
}
} while (Process32NextA(ProcessSnapshot, &ProcessEntry));
}
CloseHandle(ProcessSnapshot);
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.