无法将参数1从wchar转换为lpcstr

时间:2019-03-25 15:43:09

标签: c++

无法将整个项目更改为unicode。

enter image description here

void CreateDir(string dirname)
{
    char my_dir[247];
    WCHAR wcmy_dir[UNLEN+1];sprintf_s(my_dir, dirname.c_str()); 
    MultiByteToWideChar(CP_ACP, 0, my_dir, (int)strlen(my_dir)+1, wcmy_dir, 
    sizeof(wcmy_dir)/sizeof(wcmy_dir[0]));
    CreateDirectory(wcmy_dir, NULL);
}

1 个答案:

答案 0 :(得分:0)

您的项目未配置为使用Unicode,因此CreateDirectory()将映射到CreateDirectoryA()而不是CreateDirectoryW(),就像您的代码所假定的那样。将WCHAR字符串传递给CreateDirectoryA()确实是错误。

由于您实际上并未呼叫CreateDirectoryW(),因此根本不需要呼叫MultiByteToWideChar()。只需显式调用CreateDirectoryA(),并按原样传递您的输入string

void CreateDir(string dirname)
{
    CreateDirectoryA(dirname.c_str(), NULL);
}

内部,它将使用charWCHAR数据转换为CP_ACP,然后为您调用CreateDirectoryW()

如果您决定更新项目以使用Unicode,但不将函数更改为使用wstring,则相同的代码将仍然有效而无需更改。

如果您决定更改功能以改为使用wstring,只需显式调用CreateDirectoryW()即可进行匹配:

void CreateDir(wstring dirname)
{
    CreateDirectoryW(dirname.c_str(), NULL);
}