summaryrefslogtreecommitdiff
path: root/inc/OSD_SharedLibrary.hxx
blob: 134877d6ae49154315f9a62d8b8829b09688253d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to 
// this header file considered to be the "object code" form of the original source.

#ifndef _OSD_SharedLibrary_HeaderFile
#define _OSD_SharedLibrary_HeaderFile

#ifndef _Standard_HeaderFile
#include <Standard.hxx>
#endif
#ifndef _Standard_Macro_HeaderFile
#include <Standard_Macro.hxx>
#endif

#ifndef _Standard_Address_HeaderFile
#include <Standard_Address.hxx>
#endif
#ifndef _Standard_PCharacter_HeaderFile
#include <Standard_PCharacter.hxx>
#endif
#ifndef _Standard_CString_HeaderFile
#include <Standard_CString.hxx>
#endif
#ifndef _Standard_Boolean_HeaderFile
#include <Standard_Boolean.hxx>
#endif
#ifndef _OSD_LoadMode_HeaderFile
#include <OSD_LoadMode.hxx>
#endif
#ifndef _OSD_Function_HeaderFile
#include <OSD_Function.hxx>
#endif


//! Interface to dynamic library loader. <br>
class OSD_SharedLibrary  {
public:

  void* operator new(size_t,void* anAddress) 
  {
    return anAddress;
  }
  void* operator new(size_t size) 
  {
    return Standard::Allocate(size); 
  }
  void  operator delete(void *anAddress) 
  {
    if (anAddress) Standard::Free((Standard_Address&)anAddress); 
  }

  //! Creates a SharedLibrary object with name NULL. <br>
  Standard_EXPORT   OSD_SharedLibrary();
  //! Creates a SharedLibrary object with name aFilename. <br>
  Standard_EXPORT   OSD_SharedLibrary(const Standard_CString aFilename);
  //! Sets a name associated to the shared object. <br>
  Standard_EXPORT     void SetName(const Standard_CString aName) ;
  //! Returns the name associated to the shared object. <br>
  Standard_EXPORT     Standard_CString Name() const;
  //!   The DlOpen method provides an interface to the <br>
//!            dynamic library loader to allow shared libraries <br>
//!            to be loaded and called at runtime.  The DlOpen <br>
//!            function attempts to load Filename, in the address <br>
//!            space of the process, resolving symbols as appropriate. <br>
//!            Any libraries that Filename depends upon are also loaded. <br>
//!            If MODE is RTLD_LAZY, then the runtime loader <br>
//!            does symbol resolution only as needed. <br>
//!            Typically, this means that the first call to a function <br>
//!            in the newly	loaded library will cause the resolution of <br>
//!            the	address	of that	function to occur. <br>
//!            If Mode is RTLD_NOW, then the runtime loader must do all <br>
//!            symbol binding during the DlOpen call. <br>
//!            The DlOpen method returns a	handle that is used by DlSym <br>
//!            or DlClose. <br>
//!            If there is an error, Standard_False is returned, <br>
//!            Standard_True otherwise. <br>
//!            If a NULL Filename is specified, DlOpen returns a handle <br>
//!            for the main	executable, which allows access to dynamic <br>
//!            symbols in the running program. <br>
  Standard_EXPORT     Standard_Boolean DlOpen(const OSD_LoadMode Mode) ;
  //! The dlsym function returns the address of the <br>
//!          symbol name found in the shared library. <br>
//!          If the symbol is not found, a NULL pointer is <br>
//!          returned. <br>
  Standard_EXPORT     OSD_Function DlSymb(const Standard_CString Name) const;
  //! Deallocates the address space for the library <br>
//!          corresponding to the shared object. <br>
//!          If any user function continues to call a symbol <br>
//!          resolved in the address space of a library <br>
//!          that has been since been deallocated by DlClose, <br>
//!          the results are undefined. <br>
  Standard_EXPORT     void DlClose() const;
  //! The dlerror function returns a string describing <br>
//!          the last error that occurred from <br>
//!          a call to DlOpen, DlClose or DlSym. <br>
  Standard_EXPORT     Standard_CString DlError() const;
  //! Frees memory allocated. <br>
  Standard_EXPORT     void Destroy() ;
~OSD_SharedLibrary()
{
  Destroy();
}





protected:





private:



Standard_Address myHandle;
Standard_PCharacter myName;


};





// other Inline functions and methods (like "C++: function call" methods)


#endif