init
This commit is contained in:
parent
d5ec6494be
commit
7240505bd1
19
.devcontainer/devcontainer.json
Normal file
19
.devcontainer/devcontainer.json
Normal file
|
@ -0,0 +1,19 @@
|
|||
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
||||
// README at: https://github.com/devcontainers/templates/tree/main/src/debian
|
||||
{
|
||||
"name": "Debian",
|
||||
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
|
||||
"image": "mcr.microsoft.com/devcontainers/base:bullseye"
|
||||
|
||||
// Features to add to the dev container. More info: https://containers.dev/features.
|
||||
// "features": {},
|
||||
|
||||
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
||||
// "forwardPorts": [],
|
||||
|
||||
// Configure tool-specific properties.
|
||||
// "customizations": {},
|
||||
|
||||
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
|
||||
// "remoteUser": "root"
|
||||
}
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
bin
|
17
Makefile
Normal file
17
Makefile
Normal file
|
@ -0,0 +1,17 @@
|
|||
exampleUnix: examples/unix/main.c examples/unix/lib.c src/dlopen.c
|
||||
## BUILD UNIX EXAMPLES ##
|
||||
|
||||
mkdir -p bin
|
||||
|
||||
gcc examples/unix/main.c src/dlopen.c -o bin/exampleUnix -ldl
|
||||
gcc examples/unix/lib.c -shared -o bin/exampleUnixLib.dll
|
||||
|
||||
exampleWin: examples/win/main.c examples/win/lib.c src/dlopen.c
|
||||
## BUILD WINDOWS EXAMPLES ##
|
||||
|
||||
mkdir -p bin
|
||||
|
||||
x86_64-w64-mingw32-gcc examples/win/main.c src/dlopen.c -o bin/exampleWin
|
||||
x86_64-w64-mingw32-gcc examples/win/lib.c -shared -o bin/exampleWinLib.dll
|
||||
|
||||
all: exampleUnix exampleWin
|
5
examples/unix/lib.c
Normal file
5
examples/unix/lib.c
Normal file
|
@ -0,0 +1,5 @@
|
|||
#include <stdio.h>
|
||||
|
||||
void test(){
|
||||
printf("testing 123\n");
|
||||
}
|
6
examples/unix/main.c
Normal file
6
examples/unix/main.c
Normal file
|
@ -0,0 +1,6 @@
|
|||
#include "../../src/dlopen.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
struct hotwire_dll_t dll = hw_dlopen("./bin/exampleUnixLib.dll", RTLD_NOW);
|
||||
}
|
5
examples/win/lib.c
Normal file
5
examples/win/lib.c
Normal file
|
@ -0,0 +1,5 @@
|
|||
#include <stdio.h>
|
||||
|
||||
void test(){
|
||||
printf("testing 123(windows)\n");
|
||||
}
|
6
examples/win/main.c
Normal file
6
examples/win/main.c
Normal file
|
@ -0,0 +1,6 @@
|
|||
#include "../../src/dlopen.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
struct hotwire_dll_t dll = hw_dlopen("./bin/exampleWinLib.dll", 0);
|
||||
}
|
32
src/dlopen.c
Normal file
32
src/dlopen.c
Normal file
|
@ -0,0 +1,32 @@
|
|||
#include "dlopen.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
struct hotwire_dll_t hw_dlopen(const char *file, int flags) {
|
||||
|
||||
struct hotwire_dll_t dll;
|
||||
|
||||
// UNIX specific code(MacOS uses the same API as linux for dlopen)
|
||||
#if defined(__linux__) || defined(__APPLE__)
|
||||
dll.dll_handle = dlopen(file, flags);
|
||||
|
||||
if (dll.dll_handle == NULL){
|
||||
printf("could not load dll(UNIX api call returned error)\n");
|
||||
printf("error message: %s\n", dlerror());
|
||||
|
||||
exit(-1);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Windows specific code
|
||||
#if defined(_WIN32)
|
||||
dll.dll_handle = LoadLibrary(file);
|
||||
|
||||
if (!dll.dll_handle){
|
||||
printf("could not load dll(windows api call returned error)\n");
|
||||
|
||||
exit(-1);
|
||||
}
|
||||
#endif
|
||||
|
||||
return dll;
|
||||
}
|
37
src/dlopen.h
Normal file
37
src/dlopen.h
Normal file
|
@ -0,0 +1,37 @@
|
|||
#pragma once
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(__APPLE__)
|
||||
#define HW_MODE 0
|
||||
#include <dlfcn.h>
|
||||
#endif
|
||||
|
||||
#if defined(__linux__)
|
||||
#define HW_MODE 1
|
||||
#include <dlfcn.h>
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32)
|
||||
#define HW_MODE 2
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
|
||||
struct hotwire_dll_t {
|
||||
#if defined(__linux__) || defined(__APPLE__)
|
||||
void* dll_handle;
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32)
|
||||
HINSTANCE dll_handle;
|
||||
#endif
|
||||
};
|
||||
|
||||
// Function arguments are based off the dlopen() api on POSIX based operating systems
|
||||
// Loads dll from library
|
||||
struct hotwire_dll_t hw_dlopen(const char* file, int flags);
|
||||
|
||||
// Loads symbol from DLL
|
||||
inline void* hw_dlsym(struct hotwire_dll_t dll, const char *__restrict symbol);
|
||||
|
||||
inline int hw_dlclose(void* handle);
|
Loading…
Reference in a new issue