remane sci_warning.cpp/h to warningmode.cpp/h for compatibility with master branch
[scilab.git] / scilab / modules / dynamic_link / src / cpp / addinter.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) INRIA/ENPC
4  * Copyright (C) 2008 - INRIA - Allan CORNET
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-en.txt
11  *
12  */
13
14 /*-----------------------------------------------------------------------------------*/
15 #include "configvariable.hxx"
16
17 extern "C"
18 {
19 #include <string.h>
20 #include <stdio.h>
21 #include <stdlib.h>
22
23 #include "core_math.h"
24 #include "dynamic_link.h"
25 #include "men_Sutils.h"
26 #include "addinter.h"
27
28 #include "do_error_number.h"
29 #include "stack-c.h"
30 #include "MALLOC.h" /* MALLOC */
31 #include "sciprint.h"
32 #include "Funtab.h"
33 #include "warningmode.h"
34 #include "GetenvB.h"
35 #include "localization.h"
36 #include "Scierror.h"
37 #ifdef _MSC_VER
38 #include "ExceptionMessage.h"
39 #endif
40 }
41
42 int AddInterfaceToScilab(wchar_t* _pwstDynamicLibraryName, wchar_t* _pwstModuleName, wchar_t** _pwstEntryPointName, int _iEntryPointSize)
43 {
44     int iLibID = -1; /* Id of library */
45     int iErr = 0;
46
47     /** Try to unlink the interface if it was previously linked **/
48     ConfigVariable::EntryPointStr* pEP = ConfigVariable::getEntryPoint(_pwstModuleName);
49     if (pEP)
50     {
51         //entry point already linked, so remove it before add it
52         ConfigVariable::removeDynamicLibrary(pEP->iLibIndex);
53     }
54
55     /* link then search  */
56     /* Haven't been able to find the symbol. Try C symbol */
57     iLibID =  scilabLink(iLibID, _pwstDynamicLibraryName, &_pwstModuleName, 1, FALSE, &iErr);
58     if (iErr)
59     {
60         /* Trying with the fortran symbol */
61         iLibID =  scilabLink(iLibID, _pwstDynamicLibraryName, &_pwstModuleName, 1, TRUE, &iErr);
62         if (iErr)
63         {
64             return iErr;
65         }
66     }
67
68     pEP = ConfigVariable::getEntryPoint(_pwstModuleName);
69     if (pEP == NULL)
70     {
71         //
72         return -1;
73     }
74
75     for (int i = 0 ; i < _iEntryPointSize ; i++)
76     {
77         pEP->functionPtr(_pwstEntryPointName[i]);
78     }
79     return 0;
80 }