1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#include <windows.h>
HANDLE WINAPI FindFirstFileA(LPCSTR path, LPWIN32_FIND_DATAA data)
{
WCHAR wbuffer[MAX_PATH];
HANDLE ret;
WIN32_FIND_DATAW wdata;
if (!MultiByteToWideChar(CP_ACP, 0, path, -1, wbuffer, MAX_PATH)) {
return INVALID_HANDLE_VALUE;
}
ret = FindFirstFileW(wbuffer, &wdata);
if (ret != INVALID_HANDLE_VALUE) {
memcpy(data, &wdata, FIELD_OFFSET(WIN32_FIND_DATAA, cFileName));
WideCharToMultiByte(CP_ACP, 0, wdata.cFileName, -1, data->cFileName, MAX_PATH, NULL, NULL);
}
return ret;
}
BOOL WINAPI FindNextFileA(HANDLE handle, LPWIN32_FIND_DATAA data)
{
BOOL ret;
WIN32_FIND_DATAW wdata;
ret = FindNextFileW(handle, &wdata);
if (ret != FALSE) {
memcpy(data, &wdata, FIELD_OFFSET(WIN32_FIND_DATAA, cFileName));
WideCharToMultiByte(CP_ACP, 0, wdata.cFileName, -1, data->cFileName, MAX_PATH, NULL, NULL);
}
return ret;
}
HINSTANCE WINAPI LoadLibraryA(LPCSTR path)
{
WCHAR wbuffer[MAX_PATH];
if (!MultiByteToWideChar(CP_ACP, 0, path, -1, wbuffer, MAX_PATH)) {
return NULL;
}
return LoadLibraryW(wbuffer);
}
int WINAPI MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType)
{
WCHAR wText[4096];
WCHAR wCaption[256];
if (!MultiByteToWideChar(CP_ACP, 0, lpText, -1, wText, 4096)) {
return 0;
}
if (!MultiByteToWideChar(CP_ACP, 0, lpCaption, -1, wCaption, 256)) {
return 0;
}
return MessageBoxW(hWnd, wText, wCaption, uType);
}
BOOL WINAPI CreateDirectoryA(LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
{
WCHAR wbuffer[MAX_PATH];
if (!MultiByteToWideChar(CP_ACP, 0, lpPathName, -1, wbuffer, MAX_PATH)) {
return FALSE;
}
return CreateDirectoryW(wbuffer, lpSecurityAttributes);
}
BOOL WINAPI GetFileAttributesExA(LPCSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation)
{
WCHAR wbuffer[MAX_PATH];
if (!MultiByteToWideChar(CP_ACP, 0, lpFileName, -1, wbuffer, MAX_PATH)) {
return FALSE;
}
return GetFileAttributesExW(wbuffer, fInfoLevelId, lpFileInformation);
}
DWORD WINAPI GetModuleFileNameA(HMODULE hModule, LPSTR lpFileName, DWORD nSize)
{
WCHAR wbuffer[MAX_PATH];
DWORD ret;
if (nSize > MAX_PATH) {
nSize = MAX_PATH;
}
ret = GetModuleFileNameW(hModule, wbuffer, nSize);
if (ret) {
if (!WideCharToMultiByte(CP_ACP, 0, wbuffer, ret, lpFileName, ret, NULL, NULL)) {
return 0;
}
}
return ret;
}
|