IntelliSense:"const char *" 类型的参数与 "LPCWSTR" 类型的参数不兼容
IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"
我收到以下错误:
argument of type "const char *" is incompatible with parameter of type "LPCWSTR"
这是我的代码:
static char *getFmuPath(const char *fileName) {
char pathName[MAX_PATH];
int n = GetFullPathName(fileName, MAX_PATH, pathName, NULL);
return n ? strdup(pathName) : NULL;
}
我已经声明了 MAX_PATH
但它仍然显示路径名错误
#define MAX_PATH 4096
有什么问题?
GetFullPathName
不需要 char *
。查看文档,需要 LPTSTR
和 LPCTSTR
.
根据您的构建设置,LPTSTR
和相关类型将变为 char*
(ANSI 构建)或 wchar_t*
(Unicode 构建)。您正在构建为 Unicode。
另外,我不知道你为什么定义MAX_PATH
。这是一个 Windows 常量,因此您不应重新定义它。
我同意@tenfour,
如果您仍想强制您的系统使用 ANSI 字符以便 char* 可以工作,请更改您的代码以直接调用 GetFullPathNameA
或者,更好的是,在 Project->Properties->Configuration Properties->General->Character Set 下使用 unicode 字符集。
我遇到了同样的问题 (VS2017)。将项目更改为编译 32 位,编译得很好!我的问题是我删除了目录中的所有额外文件以清理它,它默认为 64 位,因为我是在 64 位机器上构建的。
我收到以下错误:
argument of type "const char *" is incompatible with parameter of type "LPCWSTR"
这是我的代码:
static char *getFmuPath(const char *fileName) {
char pathName[MAX_PATH];
int n = GetFullPathName(fileName, MAX_PATH, pathName, NULL);
return n ? strdup(pathName) : NULL;
}
我已经声明了 MAX_PATH
但它仍然显示路径名错误
#define MAX_PATH 4096
有什么问题?
GetFullPathName
不需要 char *
。查看文档,需要 LPTSTR
和 LPCTSTR
.
根据您的构建设置,LPTSTR
和相关类型将变为 char*
(ANSI 构建)或 wchar_t*
(Unicode 构建)。您正在构建为 Unicode。
另外,我不知道你为什么定义MAX_PATH
。这是一个 Windows 常量,因此您不应重新定义它。
我同意@tenfour,
如果您仍想强制您的系统使用 ANSI 字符以便 char* 可以工作,请更改您的代码以直接调用 GetFullPathNameA
或者,更好的是,在 Project->Properties->Configuration Properties->General->Character Set 下使用 unicode 字符集。
我遇到了同样的问题 (VS2017)。将项目更改为编译 32 位,编译得很好!我的问题是我删除了目录中的所有额外文件以清理它,它默认为 64 位,因为我是在 64 位机器上构建的。