milsko/src/abstract/dynamic.c

57 lines
1.3 KiB
C
Raw Normal View History

#include <Mw/Milsko.h>
#if defined(_WIN32)
void* MwDynamicOpen(const char* path) {
return LoadLibrary(path);
}
void* MwDynamicSymbol(void* handle, const char* symbol) {
return GetProcAddress(handle, symbol);
}
void MwDynamicClose(void* handle) {
FreeLibrary(handle);
}
2026-04-15 20:21:20 -07:00
#elif defined(CLASSIC_MAC_OS)
void* MwDynamicOpen(const char* path) {
CFragConnectionID connID;
Ptr* addr;
unsigned char err[255];
if(GetSharedLibrary((ConstStr63Param)path, kPowerPCCFragArch, kPrivateCFragCopy,
&connID, addr, err)) {
printf("Error getting %s: %s\n", path, err);
return NULL;
};
return connID;
}
void* MwDynamicSymbol(void* handle, const char* symbol) {
CFragConnectionID connID = (CFragConnectionID)handle;
Ptr* symAddr;
CFragSymbolClass* symClass;
OSErr err;
if((err = FindSymbol(connID, (ConstStr63Param)symbol, symAddr, symClass))) {
printf("Error getting %s: %d\n", symbol, err);
return NULL;
};
return symAddr;
}
void MwDynamicClose(void* handle) {
CFragConnectionID connID = (CFragConnectionID)handle;
CloseConnection(&connID);
}
2026-01-09 14:43:44 -07:00
#elif defined(__unix__) || defined(__APPLE__)
void* MwDynamicOpen(const char* path) {
return dlopen(path, RTLD_LOCAL | RTLD_LAZY);
}
void* MwDynamicSymbol(void* handle, const char* symbol) {
return dlsym(handle, symbol);
}
void MwDynamicClose(void* handle) {
dlclose(handle);
}
#endif