]> localhost Git - pldh.git/commitdiff
Add Windows pld.h and example
authormisomosi <[email protected]>
Tue, 7 May 2024 00:29:54 +0000 (20:29 -0400)
committermisomosi <[email protected]>
Tue, 7 May 2024 00:29:54 +0000 (20:29 -0400)
examples/writefile.c [new file with mode: 0644]
pld.h [new file with mode: 0644]

diff --git a/examples/writefile.c b/examples/writefile.c
new file mode 100644 (file)
index 0000000..130b481
--- /dev/null
@@ -0,0 +1,8 @@
+#include "../pld.h"\r
+\r
+PLD(KERNEL32)\r
+int main(void) {\r
+       DWORD dummy;\r
+       PFN(WriteFile)(GetStdHandle(STD_OUTPUT_HANDLE), "Hello World!\n", 13, &dummy, NULL);\r
+       return 0;\r
+}\r
diff --git a/pld.h b/pld.h
new file mode 100644 (file)
index 0000000..0d597ba
--- /dev/null
+++ b/pld.h
@@ -0,0 +1,38 @@
+#ifndef COOL_PLD_H\r
+#define COOL_PLD_H\r
+\r
+#ifdef _MSC_VER\r
+#define PLDTYPEOF(x) __typeof__(x)\r
+#else\r
+#define PLDTYPEOF(x) typeof(x)\r
+#endif\r
+\r
+#ifdef _WIN32\r
+#include <windows.h>\r
+static HMODULE PLD_LoadLibrary_wrapper(LPCSTR lpLibFileName)\r
+{\r
+       HMODULE hModule = GetModuleHandleA(lpLibFileName);\r
+       if (hModule != NULL)\r
+               hModule = LoadLibraryA(lpLibFileName);\r
+       return hModule;\r
+}\r
+static FARPROC PLD_GetProcAddress_wrapper(HMODULE hModule, LPCSTR lpProcName)\r
+{\r
+       FARPROC lpProc = GetProcAddress(hModule, lpProcName);\r
+       return lpProc;\r
+}\r
+\r
+#define PLD(name) \\r
+       static HMODULE PLDH(void) { \\r
+               static HMODULE hModule = NULL; \\r
+               if (hModule == NULL) hModule =  PLD_LoadLibrary_wrapper(#name); \\r
+               return hModule; \\r
+       } \\r
+\r
+#define PFN(name) ((PLDTYPEOF(name))PLD_GetProcAddress_wrapper(PLDH(), #name))\r
+\r
+#else\r
+#error POSIX Unimplemented!\r
+#endif\r
+\r
+#endif // COOL_PLD_H\r