无法将 CHAR 转换为 LPWSTR



>我在Visual Studio 2015中遇到了编译错误,我正在尝试将char数据转换为LPWSTR。我可以吗?还是它仅适用于字符串类型?

这是我的一段代码:

    ⋮
FILE *sortie;
char fichier[256];//   <--- HERE s my char table
int main(int argc, char *argv[])
{
    //on masque 
    HWND hwnd = GetForegroundWindow();
    ShowWindow(hwnd, SW_HIDE);
    int i, lettre, result, lastresult, lastletter, compteur;
    GetCurrentDirectory(256, fichier); 
    strcat(fichier, "\fichierlog.txt");

在发布我的问题之前,我在:

  1. https://msdn.microsoft.com/query/dev14.query?appId=Dev14IDEF1&l=EN-US&k=k%28C2664%29&rd=true

  2. C++无法从枚举转换为 LPCTSTR

  3. 如何在VC++中将char*转换为LPWSTR?

我没有找到我的案子:(

而不是您当前的代码:

FILE *sortie;
char fichier[256];//   <--- HERE s my char table
int main(int argc, char *argv[])
{
    //on masque 
    HWND hwnd = GetForegroundWindow();
    ShowWindow(hwnd, SW_HIDE);
    int i, lettre, result, lastresult, lastletter, compteur;
    GetCurrentDirectory(256, fichier); 
    strcat(fichier, "\fichierlog.txt");

例如

auto main() -> int
{
    //on masque 
    HWND hwnd = GetForegroundWindow();
    ShowWindow(hwnd, SW_HIDE);
    int i, lettre, result, lastresult, lastletter, compteur;
    std::wstring fichier( MAX_PATH, L'' );//   <--- HERE s my char table
    const DWORD len = GetCurrentDirectory( fichier.size(), &fichier[0] );
    if( len == 0 || len >= fichier.size() ) { throw std::runtime_error( "GetCurrentDirectory failed." ); }
    fichier.resize( len );
    fichier += L"/fichierlog.txt";
    std::ifstream sortie( fichier );

这应该可以解决三个问题:

  • 您正在编译为 Unicode(可能是 Visual Studio 项目),但代码适用于 Windows ANSI API。

  • 您使用的是C++编译器,但代码是低级 C。

  • 缓冲区
  • 太小,无法达到最大路径长度,并且串联可能会溢出缓冲区。

请注意,接受宽字符串的 ifstream 构造函数是Microsoft扩展。但是,Windows C++ 编译器实际上需要它,因为 C++17 中的文件系统添加到标准库中。

你正在使用 unicode 进行编译,所以你必须使用 wchar_t 来声明字符串。而不是strcat使用wcscat的 unicode 版本。

同时将字符串"\fichierlog.txt"更改为L"\fichierlog.txt"

FILE *sortie;
//char fichier[256];//   <--- HERE s my char table
wchar_t fichier[256];//   <--- HERE s my char table
//on masque 
HWND hwnd = GetForegroundWindow();
ShowWindow(hwnd, SW_HIDE);
int i, lettre, result, lastresult, lastletter, compteur;
GetCurrentDirectory(256, fichier);
//strcat(fichier, "\fichierlog.txt");
wcscat(fichier, L"\fichierlog.txt");

Visual Studio 项目设置为使用"widechars"作为默认编码(也称为 UNICODE)进行编译,因此所有 Windows API 在处理字符串时都采用wchar_t数组而不是char数组。

将项目设置为使用标准字符集,或者改用GetCurrentDirectoryA指定 GetCurrentDirectory 的 ASCII 版本。

GetCurrentDirectory实际上不是一个函数,而是一个预处理器宏,它将根据编译器设置为使用的GetCurrentDirectoryAGetCurrentDirectoryW路由到。

相关内容

  • 没有找到相关文章

最新更新