15HMODULE zwap_mod_handle;
17LPCSTR
inline get_zwap_name () {
return LPCSTR(
"zwapwin64vcl.dll"); }
18HINSTANCE
inline get_zwap_handle() {
return zwap_mod_handle; }
22const char*
inline get_zwap_name () {
return "zwap_laz.so"; }
23void*
inline get_zwap_handle() {
return zwap_mod_handle; }
26typedef void (__stdcall *ref_show_message)(LPCSTR, LPCSTR);
29 ref_show_message show_message;
34#ifdef __WINDOWS_BIT32__
35extern "C" int PL_get_string(term_t t,
char **s,
size_t *len) { __asm__ __volatile__(
"jmp PL_get_string"); }
36extern "C" int PL_initialise(
int argc,
char **argv) { __asm__ __volatile__(
"jmp PL_initialise"); }
37extern "C" int PL_register_foreign(
41 int flags, ...) { __asm__ __volatile__(
"jmp PL_register_foreign"); }
51 zwap_func.show_message = (ref_show_message)GetProcAddress(get_zwap_handle(),
"vcl_show_message");
53 char* buffer =
new char[100];
54 sprintf(buffer,
"addr: 0x%x",&zwap_func.show_message);
58 MB_OK | MB_TASKMODAL);
60 zwap_func.show_message(
"zapo",
"mapo");
63 # define gui_func(name) dlsym(get_zwap_handle(),name)
71pl_show_message(term_t a0,
int arity,
void *context)
78 if (PL_get_string(a0, &t_title, &len)) {
79 if (PL_get_string(a0+1, &t_text, &len)) {
80 zwap_func.show_message(t_title, t_text);
97 reinterpret_cast<void*
>(pl_show_message),
113 case DLL_PROCESS_ATTACH:
115 zwap_mod_handle = LoadLibraryA(get_zwap_name());
116 if (zwap_mod_handle == NULL) {
117 char* buffer =
new char[2048];
119 "could not open library:\n%s\nLoading aborted\n"
126 MB_OK | MB_TASKMODAL);
133 MB_OK | MB_TASKMODAL);
138 case DLL_THREAD_ATTACH:
140 case DLL_THREAD_DETACH:
142 case DLL_PROCESS_DETACH:
143 if (!FreeLibrary(get_zwap_handle())) {
144 char* buffer =
new char[2048];
146 "could not close library handle: 0x%x.\n(%s)\n"
147 "Windows Error-Code: %d",
154 MB_OK | MB_TASKMODAL);
168void __attribute__ ((constructor)) my_init(
void)
170 if (!(zwap_mod_handle = dlopen(
"zwap.so", RTLF_LAZY))) {
171 fputs(dlerror(), stderr);
179void __attribute__ ((destructor)) my_fini(
void)
181 dlclose(get_zwap_handle());