Unravel Engine C++ Reference
Loading...
Searching...
No Matches
service_main.h
Go to the documentation of this file.
1#pragma once
2#include "service.h"
3
4#ifndef ENTRY_APP_NAME
5#error "You must define ENTRY_APP_NAME, e.g. #define ENTRY_APP_NAME myapp"
6#define ENTRY_APP_NAME "app"
7#endif
8
9// 1) Standard Unix-style entry:
10int main(int argc, char* argv[])
11{
12 return service_main(ENTRY_APP_NAME, argc, argv);
13}
14
15#if defined(_WIN32)
16
17// these typedefs/macros let us declare WinMain/wWinMain without pulling in windows.h
18#ifndef WINAPI
19#define WINAPI __stdcall
20#endif
21
22typedef struct HINSTANCE__* HINSTANCE;
23typedef char* LPSTR;
24typedef wchar_t* PWSTR;
25
26// 2) Unicode console apps on MSVC use wmain()
27#if defined(_MSC_VER) && defined(UNICODE)
28extern "C" int wmain(int argc, wchar_t* wargv[], wchar_t* wenvp)
29{
30 (void)wenvp;
31 // __argc/__argv always exist in MSVC CRT, even under UNICODE
32 return service_main(ENTRY_APP_NAME, __argc, __argv);
33}
34#endif
35
36// 3) GUI apps on Windows look for WinMain or wWinMain
37#ifdef __cplusplus
38extern "C"
39{
40#endif
41
42#if defined(UNICODE)
43 int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrev, PWSTR lpCmdLine, int nShowCmd)
44#else
45int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd)
46#endif
47 {
48 (void)hInst;
49 (void)hPrev;
50 (void)lpCmdLine;
51 (void)nShowCmd;
52 // again, forward to service_main with ANSI argv
53 return service_main(ENTRY_APP_NAME, __argc, __argv);
54 }
55
56#ifdef __cplusplus
57} // extern "C"
58#endif
59
60#endif // _WIN32
auto service_main(const char *name, int argc, char *argv[]) -> int
Definition service.cpp:166
#define ENTRY_APP_NAME
Definition service_main.h:6
int main(int argc, char *argv[])