I have a C app that I need to compile in
Windows. And I am really unable to wrap my head around the
ANSI concept in
I want to use
GetDriveType function and there are 2 variables
W. There is also a note here saying that
GetDriveType is an alias to both and will select either based on some pre-processor.
But how should I call this function ?
This is what I am trying:
const TCHAR* path = "C:Users"; const TCHAR* trailing_slash = ""; size_t requiredSize = mbstowcs(NULL, path, 0); TCHAR* win_path = (char*)malloc((requiredSize + 2) * sizeof(char)); UINT driveType = 0; strncpy(win_path, path, requiredSize + 1); strncat(win_path, trailing_slash, 2); printf("Checking path: %sn", win_path); driveType = GetDriveType(win_path); wprintf(L"Drive type is: %dn", driveType); if (driveType == DRIVE_FIXED) printf("Successn"); else printf("Failuren"); return 0;
It produces the result
Checking path: C:Users Drive type is: 1 Failure
If I replace
GetDriveTypeA it returns the correct value
3 and succeeds.
I tried another variant too
size_t requiredSize = mbstowcs(NULL, path, 0); uint32_t drive_type = 0; const wchar_t *trailing_slash = L""; wchar_t *win_path = (wchar_t*) malloc((requiredSize + 2) * sizeof(wchar_t)); /* Convert char* to wchar* */ size_t converted = mbstowcs(win_path, path, requiredSize+1); /* Add a trailing backslash */ wcscat(win_path, trailing_slash); /* Finally, check the path */ drive_type = GetDriveType(win_path);
I see this warning:
'function' : incompatible types - from 'wchar_t *' to 'LPCSTR'
So, which one to use ? How is it generic ? The path I will be reading is from an environment variable on Windows
wchar_t etc. ? I found this post, but could not understand much
Source: Windows Questions