#define END_ROUTINE }while(0);end_of_routine:
#define QUIT_ROUTINE goto end_of_routine;
+int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
+{
+ int r = 0;
+ char* pm0 = NULL;
+START_ROUTINE
+ pm0 = DuplicateWtoM(lpCmdLine, -1);
+ r = WinMainM(hInstance, hPrevInstance, pm0, nCmdShow);
+END_ROUTINE
+ FreeDuplicatedString(pm0);
+ return r;
+}
+
HANDLE CreateFileM(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile)
{
HANDLE r = INVALID_HANDLE_VALUE;
r = TerminateStringM((LPSTR)lParam, wParam);
break;
case WM_GETTEXTLENGTH:
- Size = SendMessageW(hWnd, WM_GETTEXTLENGTH, 0, 0) + 1;
+ Size = SendMessageW(hWnd, WM_GETTEXTLENGTH, wParam, lParam) + 1;
pw0 = AllocateStringW(Size);
SendMessageW(hWnd, WM_GETTEXT, (WPARAM)Size, (LPARAM)pw0);
r = WtoM(NULL, 0, pw0, -1) - 1;
case REG_SZ:
case REG_EXPAND_SZ:
case REG_MULTI_SZ:
- if(lpData && lpcbData)
+ if(lpcbData)
{
pw1 = AllocateStringW(*lpcbData / sizeof(char) * 4);
wcbData = *lpcbData / sizeof(char) * 4;
r = RegQueryValueExW(hKey, pw0, lpReserved, lpType, (LPBYTE)pw1, &wcbData);
- *lpcbData = sizeof(char) * WtoM((char*)lpData, *lpcbData / sizeof(char), pw1, wcbData / sizeof(wchar_t));
+ if(lpData)
+ *lpcbData = sizeof(char) * WtoM((char*)lpData, *lpcbData / sizeof(char), pw1, wcbData / sizeof(wchar_t));
+ else
+ *lpcbData = sizeof(char) * WtoM(NULL, 0, pw1, wcbData / sizeof(wchar_t));
}
break;
default:
return r;
}
+FILE * fopenM(const char * _Filename, const char * _Mode)
+{
+ FILE* r = NULL;
+ wchar_t* pw0 = NULL;
+ wchar_t* pw1 = NULL;
+START_ROUTINE
+ pw0 = DuplicateMtoW(_Filename, -1);
+ pw1 = DuplicateMtoW(_Mode, -1);
+ r = _wfopen(pw0, pw1);
+END_ROUTINE
+ FreeDuplicatedString(pw0);
+ FreeDuplicatedString(pw1);
+ return r;
+}
+