我的程序,我使用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;
}
我使用来自here和here的示例,但我收到一条错误消息:“char *”类型的参数与“LPWSTR”类型的参数不兼容。
我的错误在哪里?
答案 0 :(得分:3)
如下定义的字符串称为ANSI字符串。
char* fileExt = NULL;
以下定义的字符串可以是ANSI字符串或Unicode字符串。您的项目使用UNICODE/_UNICODE
宏编译,因此它是一个Unicode字符串。
TCHAR szDir[MAX_PATH];
您无法将它们混合在一起,有关VC ++中数据类型标识符的介绍,如TCHAR
和LPCTSTR
,请参阅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;
}