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