hot reloading mule

This commit is contained in:
Ryan Fleury
2024-01-15 13:04:25 -08:00
parent dd433c89ff
commit c40d0b3acc
3 changed files with 62 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
#include <stdint.h>
#include <windows.h>
int main(int argc, char **argv)
{
int lib_loaded = 0;
HANDLE lib = {0};
FILETIME lib_last_filetime = {0};
int (*get_number)(void) = 0;
for(;;)
{
//- rjf: hot-load dll
{
HANDLE file = CreateFileA("mule_hotload_module.dll", GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
FILETIME modified = {0};
if(GetFileTime(file, 0, 0, &modified) &&
CompareFileTime(&lib_last_filetime, &modified) == -1)
{
for(int reloaded = 0; !reloaded;)
{
if(lib_loaded)
{
FreeLibrary(lib);
lib_loaded = 0;
}
BOOL copy_worked = CopyFile("mule_hotload_module.dll", "mule_hotload_module_temp.dll", 0);
lib = LoadLibraryA("mule_hotload_module_temp.dll");
if(lib != INVALID_HANDLE_VALUE)
{
reloaded = 1;
lib_last_filetime = modified;
get_number = (int(*)(void))GetProcAddress(lib, "get_number");
lib_loaded = 1;
}
}
}
CloseHandle(file);
}
int number = get_number();
printf("got a number: %i\n", number);
if(number == 0)
{
break;
}
Sleep(1000);
}
return 0;
}
+13
View File
@@ -0,0 +1,13 @@
__declspec(dllexport) int
get_number(void)
{
int sum = 0;
for(int i = 0; i < 100; i += 1)
{
sum += i;
sum += i;
sum += 1;
}
sum = 0;
return sum;
}