为什么我无法获取目录名称

时间:2015-01-14 13:36:36

标签: c winapi

我的程序,我使用Win API:

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
using namespace std;

int _main(int argc, _TCHAR* argv[]) {
    char *fileExt = NULL;
    TCHAR szDir[MAX_PATH];
    GetFullPathName(argv[0], MAX_PATH, szDir, &fileExt);
    printf("Full path: %s\nFilename: %s\n", szDir, fileExt);

    return 0;
}

我使用来自herehere的示例,但我收到一条错误消息:“char *”类型的参数与“LPWSTR”类型的参数不兼容。

我的错误在哪里?

1 个答案:

答案 0 :(得分:3)

如下定义的字符串称为ANSI字符串。

char* fileExt = NULL;

以下定义的字符串可以是ANSI字符串或Unicode字符串。您的项目使用UNICODE/_UNICODE宏编译,因此它是一个Unicode字符串。

TCHAR szDir[MAX_PATH];

您无法将它们混合在一起,有关VC ++中数据类型标识符的介绍,如TCHARLPCTSTR,请参阅this article

我对您的代码进行了一些修改,如下所示。

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR *fileExt = NULL; 
    TCHAR szDir[MAX_PATH];
    GetFullPathName(argv[0], MAX_PATH, szDir, &fileExt);
    _tprintf(_T("Full path: %s\nFilename: %s\n"), szDir, fileExt); 
    return 0;
}