first working plugin demo
This commit is contained in:
@@ -1,9 +1,26 @@
|
||||
\chapter{Plugins}
|
||||
\index{plugin}
|
||||
|
||||
\texttt{dlopen}\index{dlopen}
|
||||
% ------------------------------------
|
||||
|
||||
dlclose, dlopen, dlmopen - open and close a shared object
|
||||
Le concept de bibliothèque partagée
|
||||
(\textsl{shared library} en anglais est apparu, du moins
|
||||
dans le monde Unix, avec \textsl{SunOS 4}, en 1989.
|
||||
Mais il est probable que ce concept existait déja dans
|
||||
d'autres mondes, peut-être avec \textsl{AmigaOS} ou
|
||||
\textsl{VAX/VMS}\index{VMS}\dots
|
||||
|
||||
Et c'est en partie sur ce concept qu'est basé le premier
|
||||
mécanisme que nous allond écouvrir~:
|
||||
\texttt{dlopen} et sa petite famille.
|
||||
|
||||
% ------------------------------------
|
||||
|
||||
\section{Mécanique}
|
||||
|
||||
\index{dlopen}
|
||||
|
||||
\texttt{dlclose, dlopen, dlmopen - open and close a shared object}
|
||||
|
||||
\begin{quote}
|
||||
The function dlopen() loads the dynamic shared object (shared library)
|
||||
@@ -13,9 +30,44 @@ functions in the dlopen API, such as dlsym(3), dladdr(3), dlinfo(3),
|
||||
and dlclose().
|
||||
\end{quote}
|
||||
|
||||
% ------------------------------------
|
||||
|
||||
\section{Un exemple ?}
|
||||
|
||||
XXX\index{XXX}
|
||||
Comme d'habitude, je vais proposer un exemple un peu artificiel,
|
||||
mais qui, de part sa simplicité, illustrera clairement
|
||||
les concepts de base. Partons du principe que nous avons
|
||||
un tableau de quatre nombres flottants, et que nous souhaitons
|
||||
proposer un affichage de ce tableau modifiable à volonté.
|
||||
|
||||
Nous allons donc écrire notre fonction personnelle d'affichage
|
||||
dans un fichier \textsc{.c} indépendant (le plugiciel) et qui
|
||||
sera chargé dynamiquement au \textsl{run-time} par le logiciel
|
||||
principal (l'appelant).
|
||||
|
||||
\subsection{Le plugiciel}
|
||||
|
||||
C'est ici que nous trouverons le code actif de l'exemple,
|
||||
l'utilité de notre \textsl{usecase} reste à déterminer par nos
|
||||
lecteurs, à titre d'exercice.
|
||||
|
||||
\lstinputlisting[language=c]{code/plugiciel.c}
|
||||
|
||||
\subsection{L'appelant}
|
||||
|
||||
|
||||
|
||||
\lstinputlisting[language=c]{code/appelant.c}
|
||||
|
||||
Ah, les choses se corsent un peu, il y a un pointeur bien
|
||||
tortueux à déchiffrer. Il était temps.
|
||||
|
||||
\texttt{void (*funcname)(const char*, const float *);}
|
||||
|
||||
|
||||
% ------------------------------------
|
||||
|
||||
\section{Autres langages}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user