====== Les DLL ======
===== Sharemem =====
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''
===== Partage d'object entre DLL et EXE =====
Apparemment ce n'est pas possible/conseillé
Certain préconise d'utiliser des [[prog:lazarus:cas:interfaces|Interfaces]] pour résoudre ce problème.
===== Qu'en dit ChatGPT ? =====
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...
====== Sources & Ressources ======
* [[http://bbb-amibroker.blogspot.com/2015/07/write-dll-with-lazarus-free-pascal_9.html]]
* [[https://wiki.freepascal.org/Form_in_DLL]]
* [[https://wiki.freepascal.org/Lazarus/FPC_Libraries]]
* [[https://wiki.freepascal.org/shared_library]]
* [[https://delphi.developpez.com/faq/?page=DLL#Comment-partager-un-objet-entre-un-executable-exe-et-une-DLL]]
* [[https://www.developpez.net/forums/d355094/environnements-developpement/delphi/placer-tform-tframe-cree-dll/]]