c++ - 我在使用 GetFullPathName 时遇到错误

标签 c++ winapi

<分区>

我正在尝试使用 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;
}

结果。

enter image description here

关于c++ - 我在使用 GetFullPathName 时遇到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34365298/

相关文章:

c++ - 我可以使用现有的项目代码在 C++ 中创建一个窗口吗

c++ - 类范围内的类模板特化?

c++ - 编译器怎么知道不从锁定/解锁内部优化语句?在 C++ 中使用 boost::spinlocks

c++ - 对C++继承感到困惑

c++ - 如何生成 8 位(伪)随机数以便排除某些已知数字?

c++ - 没有 GetFilePointer(Ex) Windows API 函数吗?

c++ - 在 C++ 中查找用户输入的最小值

c++ - WaitForSingleObject() 和 SetEvent() 函数之间同步的算法?

c++ - 为什么 MessageBox 在我创建的桌面显示窗口,而 AllocConsole 在之前显示它?

windows - 我可以从 GetDC(NULL) 选择字体到 DC 中吗?