1 | % (c) 2009-2024 Lehrstuhl fuer Softwaretechnik und Programmiersprachen, | |
2 | % Heinrich Heine Universitaet Duesseldorf | |
3 | % This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html) | |
4 | ||
5 | :- module(dll_path, [set_dll_directory/1]). | |
6 | ||
7 | :- use_module(probsrc(tools_platform), [host_platform/1]). | |
8 | ||
9 | :- if((host_platform(windows), predicate_property(load_foreign_resource(_), _))). | |
10 | ||
11 | :- use_module(probsrc(pathes_lib), [safe_load_foreign_resource/2]). | |
12 | ||
13 | foreign_resource(dll_path, [set_dll_directory_c]). | |
14 | foreign(set_dll_directory_c, c, set_dll_directory_c(+string)). | |
15 | ||
16 | :- dynamic loaded/0. | |
17 | ||
18 | init :- | |
19 | loaded, | |
20 | !. | |
21 | init :- | |
22 | safe_load_foreign_resource(dll_path, dll_path), | |
23 | assertz(loaded). | |
24 | ||
25 | % Simple Prolog wrapper around the Win32 function SetDllDirectory. | |
26 | set_dll_directory(Dir) :- | |
27 | init, | |
28 | set_dll_directory_c(Dir). | |
29 | ||
30 | :- else. | |
31 | ||
32 | % Not on Windows or foreign resources not supported (e. g. SWI currently), so do nothing. | |
33 | set_dll_directory(_). | |
34 | ||
35 | :- endif. |