annotate C++/doc/Dynlib/Home.md @ 334:0b576ee64d45

* Create brand new hierarchy * Rename DynLib to Dynlib * Remove some warnings
author David Demelier <markand@malikania.fr>
date Sun, 08 Mar 2015 14:26:33 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
334
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 # DynLib
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
2
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 This class provides routines to load shared libraries in a portable manner.
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
4
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 ## Operating system support
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
6
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 | System | Support | Remarks |
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 |---------|----------|-------------------------------------|
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 | Linux | Complete | Linker needs -ldl linker flags |
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 | FreeBSD | Complete | |
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 | Windows | Complete | Immediately policy is not available |
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
12
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 ## API Reference
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
14
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 ### Macros constants
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
16
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 - [DYNLIB_EXPORT](macro/DYNLIB_EXPORT.md)
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 ### Classes
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
20
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 - [DynLib](class/Dynlib.md)
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 ## Tutorial
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 This is the library code to be compiled as a shared module.
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 **Library.cpp**
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
28
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 ````cpp
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include <iostream>
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #include <string>
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
32
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 #include "DynLib.h"
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 extern "C" {
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 DYNLIB_EXPORT void a_sayHello(const std::string &name)
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 {
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 std::cout << "Hello " << name << "!" << std::endl;
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 }
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 }
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 ````
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
44
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 And this is the code that load the shared module.
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
46
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 **Main.cpp**
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
48
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 ````cpp
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 #include <iostream>
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 #include "DynLib.h"
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
53
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 using HelloFunc = void (*)(const std::string &);
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
55
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 int main(void)
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 {
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 try {
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 DynLib library("./liba.so");
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
60
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 HelloFunc hello = library.sym<HelloFunc>("a_sayHello");
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 hello("Test");
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 } catch (const std::exception &error) {
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 std::cerr << error.what() << std::endl;
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 }
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
66
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 return 0;
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 }
0b576ee64d45 * Create brand new hierarchy
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 ````