47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | #include "SystemMicrosoft.h"
 | ||
|  | 
 | ||
|  | #include <kinc/error.h>
 | ||
|  | #include <kinc/libs/stb_sprintf.h>
 | ||
|  | 
 | ||
|  | #define S_OK ((HRESULT)0L)
 | ||
|  | 
 | ||
|  | static void winerror(HRESULT result) { | ||
|  | 	LPVOID buffer = NULL; | ||
|  | 	DWORD dw = GetLastError(); | ||
|  | 
 | ||
|  | 	__debugbreak(); | ||
|  | 
 | ||
|  | #if defined(KINC_WINDOWS) || defined(KINC_WINDOWSAPP)
 | ||
|  | 	if (dw != 0) { | ||
|  | 		FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, | ||
|  | 		               MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&buffer, 0, NULL); | ||
|  | 
 | ||
|  | 		kinc_error_message("Error: %s", buffer); | ||
|  | 	} | ||
|  | 	else { | ||
|  | #endif
 | ||
|  | 		kinc_error_message("Unknown Windows error, return value was 0x%x.", result); | ||
|  | #if defined(KINC_WINDOWS) || defined(KINC_WINDOWSAPP)
 | ||
|  | 	} | ||
|  | #endif
 | ||
|  | } | ||
|  | 
 | ||
|  | void kinc_microsoft_affirm(HRESULT result) { | ||
|  | 	if (result != S_OK) { | ||
|  | 		winerror(result); | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | void kinc_microsoft_affirm_message(HRESULT result, const char *format, ...) { | ||
|  | 	va_list args; | ||
|  | 	va_start(args, format); | ||
|  | 	kinc_affirm_args(result == S_OK, format, args); | ||
|  | 	va_end(args); | ||
|  | } | ||
|  | 
 | ||
|  | void kinc_microsoft_format(const char *format, va_list args, wchar_t *buffer) { | ||
|  | 	char cbuffer[4096]; | ||
|  | 	vsprintf(cbuffer, format, args); | ||
|  | 	MultiByteToWideChar(CP_UTF8, 0, cbuffer, -1, buffer, 4096); | ||
|  | } |