2015-01-14 7 views
0

Моя программа, где я работаю с 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, но я получил сообщение об ошибке: Аргумент типа «полукокса * "Несовместим с параметром типа" LPWSTR ".

Где моя ошибка?

+0

вы путаете ANSI и UNICODE, [эта статья] (http://www.codeproject.com/Articles/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc) объясняет различия. – kennyzx

ответ

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; 
} 
Смежные вопросы