我正在尝试使用 GetFullPathName
获取文件的完整路径,但出现错误。错误是:
cannot convert argument 1 from "char *" to 'LPCWSTR'.
有人可以帮助我吗?这是代码:
int main(int argc, char **argv)
{
char* fileExt;
char szDir[256];
GetFullPathName(argv[0], 256, szDir, &fileExt);
}
主要问题是您使用的是 ANSI 字符串而不是 UNICODE-UTF16。主要解决方案是使用 TCHAR
兼容的入口点 _tmain
,它将与 UNICODE 或 ANSI 兼容,考虑项目设置与 GetFullPathName
相同对于 ANSI 配置是 GetFullPathNameA
,对于 UNICODE 配置是 GetFullPathNameW
。
例子
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR* fileExt;
TCHAR szDir[256];
GetFullPathName(argv[0], 256, szDir, &fileExt);
return 0;
}
要在您的程序中显示 ANSI 或 UNICODE 字符串,您可以在主函数的开头使用此语句
#if defined(UNICODE) || defined(_UNICODE)
#define consoleOut std::wcout
#else
#define consoleOut std::cout
#endif
比将字符串显示为
consoleOut << szDir << std::endl;
整体方案将是
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#if defined(UNICODE) || defined(_UNICODE)
#define consoleOut std::wcout
#else
#define consoleOut std::cout
#endif
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR* fileExt;
TCHAR szDir[256];
GetFullPathName(argv[0], 256, szDir, &fileExt);
consoleOut << szDir << std::endl;
return 0;
}
结果。