C++中的复制应用程序(.exe) 我现在开始使用C++,我遇到了一个问题。我以前从未使用过C++,但我使用过C.

C++中的复制应用程序(.exe) 我现在开始使用C++,我遇到了一个问题。我以前从未使用过C++,但我使用过C.,c++,windows,winapi,C++,Windows,Winapi,我想复制我的应用程序,但无法复制,因为如果我获取的应用程序路径为char*path=\uu argv[0];并使用CopyFilepath复制文件,另一个路径为TRUE;我得到一个编译器错误: char*类型的参数与LPCTSTR类型的参数不兼容 如果我尝试使用此代码进行转换: char* path = __argv[0]; wchar_t wtext[20]; mbstowcs(wtext, path, strlen(path) + 1); LPWSTR ptr = wtext; 它也不起作

我想复制我的应用程序,但无法复制,因为如果我获取的应用程序路径为char*path=\uu argv[0];并使用CopyFilepath复制文件,另一个路径为TRUE;我得到一个编译器错误:

char*类型的参数与LPCTSTR类型的参数不兼容

如果我尝试使用此代码进行转换:

char* path = __argv[0];
wchar_t wtext[20];
mbstowcs(wtext, path, strlen(path) + 1);
LPWSTR ptr = wtext;
它也不起作用

如果我试着打印这个:

cout << wtext;
它显示随机数字和字母

我不知道如何从一个字符中复制一个文件,抱歉,但是我是C++中的NOOB。
有人知道如何解决这个问题吗?

解决方案很简单:

通过定义_Unicode和Unicode预处理器符号来启用Unicode支持。根据错误诊断判断,您已经在这样做了。 提供名为wmain而不是main的Unicode入口点。 从wmain访问命令行参数,或使用代替_argv。
注意:将可执行文件的名称作为第一个命令行参数传递是一种约定,而不是约定。如果您想要一个健壮的解决方案,请使用例如或Microsoft特定的CRT扩展名来查询可执行文件的名称。

mbstowcs的最后一个参数应为20,以匹配wtext的长度,您还应该检查mbstowcs的返回值,以确保它成功。简单的答案是使用CopyFileA而不是CopyFile,只要您的文件名中没有可以正常工作的非ASCII字符。此问题特定于windows。在标准C++中没有这样的事情,即,它是一个保留标识符,所以使用一个带有两个主要下划线的名称会给出未定义的行为。你应该问的问题是如何获得UTF16文本的完整路径到可执行文件。我建议你问那个问题而不是这个问题。