我有一些问题要让这段代码工作:
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
string Filepath;
string Temp;
int WINAPI WinMain(HINSTANCE instanceHandle, HINSTANCE, char*, int)
{
const char* env_p = std::getenv("TEMP");
std::getenv("TEMP");
Temp = env_p;
Filepath = Temp + "\\File.txt";
Editfile id(Filepath.c_str());
std::cin.get();
return 0;
}
错误C2664无法从“const char *”转换为“const wchar_t *”
我看到了问题,但我不容易解决它。
答案 0 :(得分:0)
char
这样的基于std::getenv
的函数可以在Windows中返回不可用的数据,因为Windows中的标准窄编码非常有限。
而是使用宽字符函数,以及环境内容,最好是Windows API本身。
然后没有必要在编码之间进行转换,因为它是所有UTF-16,在C ++中表示为基于wchar_t
的字符串:
#include <string>
#include <stdexcept> // runtime error
using namespace std;
#undef UNICODE
#define UNICODE
#undef NOMINMAX
#define NOMINMAX
#undef STRICT
#define STRICT
#include <windows.h>
auto hopefully( bool const e ) -> bool { return e; }
[[noreturn]] auto fail( string const& s ) -> bool { throw runtime_error( s ); }
auto path_to_tempdir()
-> wstring
{
wstring result( MAX_PATH, L'#' );
DWORD const n = GetTempPath( result.size(), &result[0] );
hopefully( 0 < n && n < result.size() )
|| fail( "GetTempPath failed" );
result.resize( n );
return result;
}
auto main()
-> int
{
// Just crash if there's no temp directory.
DWORD const as_infobox = MB_ICONINFORMATION | MB_SETFOREGROUND;
MessageBox( 0, path_to_tempdir().c_str(), L"Temp directory:", as_infobox );
}