62f95d85fb2c98c421935e794860f04b56d0b441
[scilab.git] / scilab / modules / dynamic_link / includes / dynamiclibrary_others.h
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2007-2008 - INRIA - Allan CORNET
4  * Copyright (C) 2007-2008 - INRIA - Sylvestre LEDRU
5  *
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
11  *
12  */
13 #ifndef __DYNAMICLIBRARY_OTHERS_H__
14 #define __DYNAMICLIBRARY_OTHERS_H__
15
16 #include <dlfcn.h>
17 #include <wchar.h>
18 #include "BOOL.h" /* BOOL */
19
20 typedef void * DynLibHandle;
21 typedef void * DynLibFuncPtr;
22
23 /**
24 * Maps the specified executable module into the address space of the calling process
25 * @param name of dynamic library
26 * @return Handle to the loaded library
27 */
28 #define LoadDynLibrary(libname) (DynLibHandle) dlopen(libname,  RTLD_NOW | RTLD_GLOBAL);
29
30 /**
31 * Decrements the reference count of the loaded dynamic-link library
32 * @param Handle to the loaded library
33 * @return BOOL If the function succeeds, the return value is nonzero
34 */
35 BOOL FreeDynLibrary(DynLibHandle hInstance);
36
37 /**
38 * Retrieves the address of an exported function
39 * @param Handle to the loaded library
40 * @param string that specifies the function
41 * @return a pointer
42 */
43 DynLibFuncPtr GetDynLibFuncPtr(DynLibHandle hInstance, const char *funcName);
44
45 /**
46 * return last dynamic linking error
47 * @return a string
48 */
49 #define GetLastDynLibError() dlerror()
50
51
52 typedef int (*PROC_GATEWAY) (void);
53
54 typedef enum { DYN_GW_NO_ERROR = 0,
55                DYN_GW_LOAD_LIBRARY_ERROR = 1,
56                DYN_GW_PTR_FUNCTION_ERROR = 2,
57                DYN_GW_CALL_FUNCTION_ERROR = 3
58
59              } dynamic_gateway_error_code;
60
61 typedef enum { DYNLIB_NAME_FORMAT_AUTO = 0,
62                DYNLIB_NAME_FORMAT_1 = 1,
63                DYNLIB_NAME_FORMAT_2 = 2,
64                DYNLIB_NAME_FORMAT_3 = 3
65              } dynlib_name_format;
66
67 #define FORMATGATEWAYLIBNAME_1 L"%ls%ls"
68 #define FORMATGATEWAYLIBNAME_2 L"sci%ls%ls"
69 #define FORMATGATEWAYLIBNAME_3 L"libsci%ls%ls"
70
71 /**
72 * Build name of dynamic library based on module name
73 * @param[in] module name
74 * @param[in] generated dynamic lib name type
75 * @return name of dynamic library
76 */
77 wchar_t* buildModuleDynLibraryNameW(const wchar_t* _pwstModuleName, dynlib_name_format _iType);
78 char* buildModuleDynLibraryName(const char* _pstModuleName, dynlib_name_format _iType);
79
80 #endif /* __DYNAMICLIBRARY_OTHERS_H__ */
81
82