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 *。查看文档,需要 LPTSTRLPCTSTR.

根据您的构建设置,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 位机器上构建的。