Chargement explicite de DLL – Windows

Structure

| main.cpp
| Love.dll

Code

//main.cpp

#include <windows.h>
#include <iostream>

typedef const char* (*DLLStoreLove)(const char*); // définir le type de la fonction

int main()
{
    // charger la DLL
    HINSTANCE DLL = LoadLibrary(L"Love.dll");
    if (DLL == NULL) {
        std::cout << "Erreur lors du chargement de la DLL." << std::endl;
        return 1;
    }

    // récupérer l'adresse de la fonction "StoreLove"
    DLLStoreLove StoreLove = (DLLStoreLove)GetProcAddress(DLL, "StoreLove");
    if (StoreLove == NULL) {
        std::cout << "Erreur lors de la récupération de la fonction StoreLove." << std::endl;
        return 1;
    }

    // utiliser la fonction "StoreLove"
    const char* result = StoreLove("<3 <3 <3");
    std::cout << "Résultat de l'appel à StoreLove : " << result << std::endl;

    // décharger la DLL
    FreeLibrary(DLL);

    return 0;
}

Remarques

  • On peut charger une DLL 64 bit (PE32+) dans un programme 64bit
  • On peut charger une DLL 32 bit (PE32) dans un programme 32bit

Ressources

https://learn.microsoft.com/en-us/cpp/build/linking-an-executable-to-a-dll?view=msvc-170#determining-which-linking-method-to-use