summaryrefslogtreecommitdiff
path: root/build/appstub
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2018-07-31 17:51:37 +0300
committerGeorge Hazan <ghazan@miranda.im>2018-07-31 17:51:37 +0300
commit2b6d90564fa3cf379cfd57dfbfdf4cf750e994b1 (patch)
tree42276091fc22e825eb1cf60f5c8fade8cfaa03e6 /build/appstub
parent29077096131fad5026780272a870a4a07bad76d2 (diff)
exe loader extracted to the separate module, now it's possible to compile all exe using shared runtime modules
Diffstat (limited to 'build/appstub')
-rw-r--r--build/appstub/appstub.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/build/appstub/appstub.cpp b/build/appstub/appstub.cpp
new file mode 100644
index 0000000000..67e4159c8e
--- /dev/null
+++ b/build/appstub/appstub.cpp
@@ -0,0 +1,37 @@
+#include <Windows.h>
+
+#include <delayimp.h>
+#pragma comment(lib, "delayimp.lib")
+
+static HANDLE hUcrtDll = nullptr;
+
+EXTERN_C HANDLE WINAPI hook(unsigned mode, PDelayLoadInfo)
+{
+ if (mode == dliNotePreLoadLibrary && hUcrtDll == nullptr) {
+ wchar_t wszPath[MAX_PATH];
+ GetModuleFileNameW(nullptr, wszPath, _countof(wszPath));
+
+ // if current dir isn't set
+ for (int i = lstrlenW(wszPath); i >= 0; i--)
+ if (wszPath[i] == '\\') {
+ wszPath[i] = 0;
+ break;
+ }
+
+ SetCurrentDirectoryW(wszPath);
+
+ lstrcatW(wszPath, L"\\libs");
+ SetDllDirectoryW(wszPath);
+
+#ifdef _DEBUG
+ lstrcatW(wszPath, L"\\ucrtbased.dll");
+#else
+ lstrcatW(wszPath, L"\\ucrtbase.dll");
+#endif
+ hUcrtDll = LoadLibraryW(wszPath);
+ }
+
+ return 0;
+}
+
+EXTERN_C const PfnDliHook __pfnDliNotifyHook2 = (PfnDliHook)&hook;