Compilation: insert a guard on supported OS
[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.1-en.txt
10  *
11  */
12 #ifndef __DYNAMICLIBRARY_WINDOWS_H__
13 #define __DYNAMICLIBRARY_WINDOWS_H__
14 #ifdef _WIN32 // guard against mis-compilation
15
16 //avoid declaration on macro min/max
17 #define NOMINMAX
18 #include <Windows.h>
19 #undef NOMINMAX
20 #include "dynlib_dynamic_link.h"
21
22 #include "BOOL.h"
23
24 typedef HINSTANCE DynLibHandle;
25 typedef FARPROC DynLibFuncPtr;
26
27 /**
28 * Maps the specified executable module into the address space of the calling process
29 * @param name of dynamic library
30 * @return Handle to the loaded library
31 */
32 DYNAMIC_LINK_IMPEXP DynLibHandle LoadDynLibrary(char *libname);
33
34 /**
35 * Maps the specified executable module into the address space of the calling process
36 * @param name of dynamic library (wide char)
37 * @return Handle to the loaded library
38 */
39 DYNAMIC_LINK_IMPEXP DynLibHandle LoadDynLibraryW(wchar_t *libname);
40
41
42 /**
43 * Decrements the reference count of the loaded dynamic-link library
44 * @param Handle to the loaded library
45 * @return BOOL If the function succeeds, the return value is nonzero
46 */
47 DYNAMIC_LINK_IMPEXP BOOL FreeDynLibrary(DynLibHandle hInstance);
48
49 /**
50 * Retrieves the address of an exported function
51 * @param Handle to the loaded library
52 * @param string that specifies the function
53 * @return
54 */
55 DYNAMIC_LINK_IMPEXP DynLibFuncPtr GetDynLibFuncPtr(DynLibHandle hInstance, const char *funcName);
56
57 /**
58 * return last dynamic linking error
59 * @return a string
60 */
61 DYNAMIC_LINK_IMPEXP char * GetLastDynLibError(void);
62
63 typedef int(*PROC_GATEWAY) (void);
64
65 typedef enum
66 {
67     DYN_GW_NO_ERROR = 0,
68     DYN_GW_LOAD_LIBRARY_ERROR = 1,
69     DYN_GW_PTR_FUNCTION_ERROR = 2,
70     DYN_GW_CALL_FUNCTION_ERROR = 3
71
72 } dynamic_gateway_error_code;
73
74 typedef enum
75 {
76     DYNLIB_NAME_FORMAT_AUTO = 0,
77     DYNLIB_NAME_FORMAT_1 = 1,
78     DYNLIB_NAME_FORMAT_2 = 2,
79     DYNLIB_NAME_FORMAT_3 = 3
80 } dynlib_name_format;
81
82 #define FORMATGATEWAYLIBNAME_1 L"%ls%ls"
83 #define FORMATGATEWAYLIBNAME_2 L"sci%ls%ls"
84 #define FORMATGATEWAYLIBNAME_3 L"libsci%ls%ls"
85
86 /**
87 * Build name of dynamic library based on module name
88 * @param[in] module name
89 * @param[in] generated dynamic lib name type
90 * @return name of dynamic library
91 */
92 DYNAMIC_LINK_IMPEXP wchar_t* buildModuleDynLibraryNameW(const wchar_t* _pwstModuleName, dynlib_name_format _iType);
93 DYNAMIC_LINK_IMPEXP char* buildModuleDynLibraryName(const char* _pstModuleName, dynlib_name_format _iType);
94
95 #endif /* _WIN32 // guard against mis-compilation */
96 #endif /* __DYNAMICLIBRARY_WINDOWS_H__ */
97