Clean old static structs from dynamic_link
[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 "sci_warning.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     {//entry point already linked, so remove it before add it
51         ConfigVariable::removeDynamicLibrary(pEP->iLibIndex);
52     }
53
54         /* link then search  */ 
55         /* Haven't been able to find the symbol. Try C symbol */
56     iLibID =  scilabLink(iLibID, _pwstDynamicLibraryName, &_pwstModuleName, 1, FALSE, &iErr);
57     if(iErr)
58         {
59         /* Trying with the fortran symbol */
60         iLibID =  scilabLink(iLibID, _pwstDynamicLibraryName, &_pwstModuleName, 1, TRUE, &iErr);
61         if(iErr)
62         {
63             return iErr;
64         }
65     }
66
67     pEP = ConfigVariable::getEntryPoint(_pwstModuleName);
68     if(pEP == NULL)
69     {//
70         return -1;
71     }
72
73     for(int i = 0 ; i < _iEntryPointSize ; i++)
74     {
75         pEP->functionPtr(_pwstEntryPointName[i]);
76     }
77         return 0;
78 }