Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
prog:lazarus:cas:dll:dll [17/03/2023 17:18] thierry [Partage d'object entre DLL et EXE] |
prog:lazarus:cas:dll:dll [18/03/2023 18:42] (Version actuelle) thierry [Partage d'object entre DLL et EXE] |
||
---|---|---|---|
Ligne 11: | Ligne 11: | ||
Certain préconise d'utiliser des [[prog:lazarus:cas:interfaces|Interfaces]] pour résoudre ce problème. | 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 : | ||
+ | |||
+ | <code delphi> | ||
+ | library MyObject; | ||
+ | |||
+ | uses | ||
+ | MyObjectUnit; | ||
+ | |||
+ | {$MODE OBJFPC} | ||
+ | {$H+} | ||
+ | |||
+ | exports | ||
+ | MyObjectFunction; | ||
+ | |||
+ | begin | ||
+ | end. | ||
+ | </code> | ||
+ | Dans votre programme exécutable, incluez l'interface de l'objet en utilisant la directive "external". Par exemple : | ||
+ | <code delphi> | ||
+ | program MyProgram; | ||
+ | |||
+ | uses | ||
+ | MyObjectUnit; | ||
+ | |||
+ | {$MODE OBJFPC} | ||
+ | {$H+} | ||
+ | |||
+ | var | ||
+ | MyObject: TObject; | ||
+ | |||
+ | external 'MyObject.dll'; | ||
+ | |||
+ | begin | ||
+ | MyObject := TObject.Create; | ||
+ | // Utilisez l'objet MyObject ici | ||
+ | end. | ||
+ | </code> | ||
+ | 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 ====== | ====== Sources & Ressources ====== | ||
Ligne 17: | Ligne 68: | ||
* [[https://wiki.freepascal.org/Lazarus/FPC_Libraries]] | * [[https://wiki.freepascal.org/Lazarus/FPC_Libraries]] | ||
* [[https://wiki.freepascal.org/shared_library]] | * [[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/]] | ||