我收到以下错误:
类型“const char *”的参数与“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
有什么问题?
答案 0 :(得分:4)
GetFullPathName
不接受char *
。查看文档,需要LPTSTR
和LPCTSTR
。
根据您的构建设置,LPTSTR
和相关类型将变为char*
(ANSI构建)或wchar_t*
(Unicode构建)。您正在构建为Unicode。
另外,我不知道你为什么定义MAX_PATH
。这是一个Windows常量,所以你不应该重新定义它。
答案 1 :(得分:0)
我同意@tenfour,
如果您仍希望使用ANSI字符强制执行系统工作,那么char *会起作用,请将代码更改为直接调用GetFullPathNameA
或者,更好的是,在Project-> Properties-> Configuration Properties-> General-> Character Set下使用unicode字符集。
答案 2 :(得分:0)
我遇到了同样的问题(VS2017)。将项目更改为可编译32位,并且编译很棒!我的问题是我删除了目录中的所有多余文件以进行清理,并且由于我是在64位计算机上构建的,因此默认为64位。