![]() |
![]() |
When specifying the needed include files we have included the gxsdldr.c loader file directly:
Starting the main function and defining the a variable for the error code:
int main(void) { int err_code;
Defining a character buffer for the error message (Unicode version):
/* Unicode version */ { wchar_t err_str[256];
Setting new error code and message:
/* Updates the error buffer */ gx_seterror(GX_EINVAL, L"(Test string [%i %hs %ls])", (int)1234, "ABC", L"ABC");
Getting the error code and message set:
/* Gets the error string and code */ err_code = gx_geterror(0, err_str, sizeof(err_str)/sizeof(wchar_t)-1);
Displaying the error code and message:
err_str[sizeof(err_str)/sizeof(wchar_t)-1] = 0; printf("Error code: %i, Description: '%ls'\n", err_code, err_str); }
And the same in ASCII version:
/* ASCII version */ { char err_str[256]; /* Updates the error buffer */ gx_seterrora(GX_EINVAL, "(Test string [%i %hs %ls])", (int)1234, "ABC", L"ABC"); /* Gets the error string and code */ err_code = gx_geterrora(0, err_str, sizeof(err_str)/sizeof(char)-1); err_str[sizeof(err_str)/sizeof(char)-1] = 0; printf("Error code: %i, Description: '%hs'\n", err_code, err_str); }
And the sample program ends:
return 0;
}
When specifying the needed include files we have included the gxsdldr.c loader file directly:
Starting the main function and defining the a variable for the error code and a character buffer for the error message:
int main(void) { int err_code; char err_str[256]; err_str[sizeof(err_str)-1] = 0;
Clearing the error buffer:
/* Clears the error buffer */ gx_clearerror();
Getting and displaying the error code (0 - GX_ENOERR) and message (''):
/* Gets the error code and description text */ gx_geterrora(&err_code, err_str, sizeof(err_str)-1); /* Displays the error code and description text to STDOUT */ printf("1. Error code: %i, Description: '%s'\n", err_code, err_str);
Setting and displaying the new error code and message:
/* Sets a new error code and description text */ gx_seterror(GX_EINVAL, (const wchar_t *)L"%hs", "(Error occurred in my test application)"); /* Gets second error code and description text */ gx_geterrora(&err_code, err_str, sizeof(err_str)-1); /* Displays second error code and description text to STDOUT */ printf("2. Error code: %i, Description: '%s'\n", err_code, err_str);
And the sample program ends:
return 0;
}
When specifying the needed include files we have included the gxsdldr.c loader file directly:
Starting the main function and defining the a variable for the error code and a character buffer for the error message:
int main(void) { int err_code; char err_str[256];
Setting new error code and message:
/* Sets some error code and description text (no format string) */ gx_seterror(GX_EINVAL, (const wchar_t *)L"%hs", "Line #1: Error occurred");
Appending new error message to the back of the error buffer and overriding the error code:
gx_appenderror(GX_EREAD, (const wchar_t *)L"%hs", "Line #2: Read error occurred");
Appending new error message to the front of the error buffer and overriding the error code:
gx_prependerror(GX_EWRITE, (const wchar_t *)L"%hs", "Line #0: Write error occurred");
Getting and displaying the error code and message:
/* Gets the error code and description text */ gx_geterrora(&err_code, err_str, sizeof(err_str)-1); /* Displays the error code and description text to STDOUT */ err_str[sizeof(err_str)-1] = 0; printf("Error code: %08x\n Description: '%s'\n", err_code, err_str);
And the sample program ends:
return 0;
}
When specifying the needed include files we have included the gxsdldr.c loader file directly:
Including platform specific interface(s):
#include <windows.h>
Defining a thread function that has the error code as parameter:
DWORD WINAPI my_thread_func(LPVOID err_arg) { int ix; int err_code = (int)err_arg; gx_seterrorcode(err_code); err_code = 0; for(ix = 0; ix < 5; ix++) { gx_geterrora(&err_code, (char *)0, 0); printf("Thread %08x: error code is %08x\n", (int)GetCurrentThreadId(), err_code); Sleep(2000); } ExitThread(0); return 0; }
Starting the main function:
int main(void) {
Defining the two threads:
HANDLE thread1, thread2;
Creating and starting the first thread:
/* Creates the first thread with GX_ECREAT */ thread1 = CreateThread(0, 0, my_thread_func, (LPVOID)GX_ECREAT, 0, NULL); if(thread1 == NULL) { fprintf(stderr, "CreateThread() error: %i\n", GetLastError()); return 1; }
Waiting for a short time:
Sleep(1000);
Creating and starting the second thread:
/* Creates the second thread with GX_EREAD */ thread2 = CreateThread(0, 0, my_thread_func, (LPVOID)GX_EREAD, 0, NULL); if(thread2 == 0) { fprintf(stderr, "CreateThread() error: %i\n", GetLastError()); return 1; }
Waiting for the threads to finish their job and ending the sample program:
/* Synchronizes */ WaitForSingleObject(thread1, INFINITE); CloseHandle(thread1); WaitForSingleObject(thread2, INFINITE); CloseHandle(thread2); return 0; }