-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCModule.h
More file actions
102 lines (82 loc) · 2.96 KB
/
CModule.h
File metadata and controls
102 lines (82 loc) · 2.96 KB
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
/*************************************************************************************
cpl - cross-platform library - v. 0.1.0.
Copyright (C) 2017 Janus Lynggaard Thorborg [LightBridge Studios]
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
See \licenses\ for additional details on licenses associated with this program.
**************************************************************************************
file:CModule.h
Interface for the wrapper class CModule. CModule wraps loading and dynamic
binding of external libraries like DLLs, dylibs, SOs etc. with safe
copy construction (using reference counting abilities of underlying OS).
options:
#define CPL_CMOD_USECF
uses corefoundation instead of the dyld loader on mac (advised)
*************************************************************************************/
#ifndef CPL_CMODULE_H
#define CPL_CMODULE_H
#include <string>
//#include "Common.h"
#include "filesystem.h"
#include "Core.h"
#include <vector>
// if set, uses corefoundation instead of the dyld loader on mac
typedef void * ModuleHandle;
namespace cpl
{
class CModule
{
public:
CModule();
CModule(std::string moduleName);
bool addSearchPath(const fs::path& directory);
/// <summary>
/// Returns a pointer to a symbol inside the loaded module of this instance
/// </summary>
void* getFuncAddress(const string_ref functionName);
/// <summary>
/// If no module is loaded, loads moduleName
/// </summary>
int load(std::string moduleName);
/// <summary>
/// If no module is loaded, loads moduleName
/// </summary>
int load(std::string moduleName, std::string& error);
/// <summary>
/// Increases the reference of the loaded module
/// </summary>
void increaseReference();
/// <summary>
/// Decreases the reference count of the loaded module.
/// </summary>
void decreaseReference();
/// <summary>
/// Releases the module, decreasing it's reference count and losing the reference.
/// </summary>
bool release();
/// <summary>
/// Returns the native handle to the module
/// </summary>
ModuleHandle getHandle();
CModule(const CModule &);
CModule(CModule &&) = default;
CModule& operator = (CModule&& other) = default;
/// <summary>
/// Destructor. Releases the module
/// </summary>
~CModule();
private:
ModuleHandle moduleHandle;
std::string name;
std::vector<ModuleHandle> directoryCookies;
};
}
#endif