我使用GetFullPathName时出错

时间:2015-12-18 23:09:59

标签: c++ winapi

我正在尝试使用GetFullPathName来获取文件的完整路径,但我有错误。错误是:

  

无法转换参数1来自" char *"到LPCWSTR'。

有人可以帮助我吗?这是代码:

int main(int argc, char **argv)
{
    char* fileExt;
    char szDir[256];
    GetFullPathName(argv[0], 256, szDir, &fileExt);
}

1 个答案:

答案 0 :(得分:1)

主要问题是您使用ANSI字符串而不是UNICODE-UTF16。主要解决方案是使用TCHAR兼容入口点_tmain,它将与UNICODE或ANSI兼容考虑项目设置,因为ANSI配置的GetFullPathName将是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;
}

结果。

enter image description here