Friday, 14 December 2018

Utiliser des DLL

From LISA

Jump to: navigation, search

Introduction

Lorsqu'un programme atteint une taille conséquence, il est utile de le séparer en plusieurs morceaux. Certaines fonctions, qui ne sont plus (ou peu) modifiés, peuvent être regroupées en bibliothèque : les DLL. Une DLL est une bibliothèque dynamique, cela a plusieurs avantages :

  • Il ne faut plus recompiler les DLL à chaque fois, uniquement en cas de modification d'une partie de son code.
  • Réduction de la taille de l'éxecutable
  • Les DLL ne sont chargées en mémoire que lors d'un appel d'une fonction. Des parties du programme peu utilisées ne sont pas tout le temps mises en mémoire, comme c'est le cas d'une compilation statique.

Les DLL sont propres à Windows. Il existe cependant des mécanismes similaires pour les autres OS.

Le tutoriel suivant portera sur Visual Studio.

Fichier DLL

La DLL suivant contient une fonction void hello(void)

#include <iostream>
using namespace std;
#ifdef _MANAGED
#pragma managed(push, off)
#endif
BOOL APIENTRY DllMain( HMODULE hModule,
                      DWORD  ul_reason_for_call,
                      LPVOID lpReserved )
{
    return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
extern "C" __declspec(dllexport) void hello(void)
{ cout << "Hello World" << endl; }

Code utilisant la DLL

Le fichier DLL doit bien sûr être accessible par le programme qui l'appelle (path générale ou dans le même répertoire que l'exe).


#include <cstdlib>
extern "C" __declspec(dllimport) void hello(void) ;
int _tmain(int argc, _TCHAR* argv[])
{ hello();
system("pause");
return 0;
}

On remarque la signature de la fonction hello. Comme d'habitude, elle peut bien sûr être déclarée dans un fichier .h .