Partage de mémoire entre le programme et la DLL
→ https://www.freepascal.org/docs-html/rtl/sharemem/index.html
Pour partager la mémoire entre programme et DLL on doit inclure l'unité sharemem
dans la clause uses
de l'exe
et de la dll
Et on doit livrer avec l'exe et la dll, la DLL fpcmemdll.dll
dont le code source se trouve sous fpcsrc\rtl\win
Apparemment ce n'est pas possible/conseillé
Certain préconise d'utiliser des Interfaces pour résoudre ce problème.
J'ai posé la question : “Je programme avec Free Pascal, peut on partager un objet entre un exe et une dll” à ChatGPT, voici sa réponse.
Oui, il est possible de partager des objets entre un programme exécutable et une bibliothèque dynamique (DLL) dans Free Pascal. Voici quelques étapes générales que vous pouvez suivre pour le faire :
Créez votre objet et compilez-le en tant que bibliothèque dynamique (DLL) en utilisant la commande “{$MODE OBJFPC}” et “{$H+}” pour activer les gestionnaires de mémoire partagée.
Exportez les symboles de l'objet en utilisant la directive “exports” pour que les programmes utilisant la DLL puissent accéder aux objets. Par exemple :
library MyObject; uses MyObjectUnit; {$MODE OBJFPC} {$H+} exports MyObjectFunction; begin end.
Dans votre programme exécutable, incluez l'interface de l'objet en utilisant la directive “external”. Par exemple :
program MyProgram; uses MyObjectUnit; {$MODE OBJFPC} {$H+} var MyObject: TObject; external 'MyObject.dll'; begin MyObject := TObject.Create; // Utilisez l'objet MyObject ici end.
Compilez votre programme exécutable en utilisant la bibliothèque dynamique (DLL) que vous avez créée dans l'étape 1. Il est important de noter que lorsque vous partagez des objets entre un programme exécutable et une DLL, vous devez faire attention à la gestion de la mémoire partagée. Vous devrez peut-être utiliser des fonctions spéciales pour allouer et libérer la mémoire partagée afin d'éviter des problèmes de corruption de mémoire ou de fuite de mémoire.
Personnellement je pense que c'est du bullshit, mais je met ce texte ici pour l'analyser ultérieurement…