Mercurial > code
annotate C++/doc/Dynlib/Home.md @ 335:486767e1d165
Socket: fix under Windows and add new style
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 11 Mar 2015 09:41:48 +0100 |
parents | 0b576ee64d45 |
children |
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 ```` |