Exigences : Étant donné que nous avons reçu un tel projet récemment, la fête A et d'autres nous ont demandé d'ajouter les fonctions que nous avons développées à une application développée par PB qu'ils ont déjà. Le seul but est de ne pas avoir deux applications EXE.
Solution : package de l'application de Delphi sous la forme d'une DLL, puis l'appelez dans le PB.
conception :
1. PB PART
1. Créez une nouvelle classe non visuelle N_CST_DEMO, et nous mettons tous les appels du même module dans cette classe.
2. Définissez les appels API. Définition dans Declare --- Fonctions externes locales
// Handle: est la poignée de la fenêtre actuelle;
Sub-Routine Show_demo (Handle Ulong, String Param) Library "Project1.dll"
3. Créez un nouveau formulaire w_main.
4. Créez un nouveau menu m_dll.
5. Créez un élément de menu appelé Test DLL. Écrivez dans l'événement cliqué:
n_cst_demo n_pda n_pda = créer n_cst_demo n_pda.show_demo (manche (parentWindow), "ABCD1234") Détruire n_pda |
De cette façon, notre partie PB est terminée.
2. Part Delphi
1. Créez un nouveau projet DLL.
2. Créez une nouvelle forme1. sauvegarder.3. Écrivez du code dans le projet:
Bibliothèque Project1; usages Sysutils, Formes, Fenêtres, Classes, Commandes, Dialogues, Unit1 dans 'Unit1.Pas' {Form1}, Dm dans 'dm.pas' {datamodule1: tdatamodule}; {$ R * .res} procédure dllmain (raison: entier); Commencer cas de cas de Dll_process_attach: Commencer application.CreateForm (TDATAMODULE1, DATAMODULE1); fin; Dll_process_detach: Commencer fin; Dll_thread_attach: commencez à fin; Dll_thread_detach: begin end; fin fin; // N'oubliez pas, à Delphi, les paramètres de chaîne doivent être définis avec le type PCHA Procédure Show_demo (Handle: Thandle; const Param: pChar); var OldHandle: Thandle; Commencer // enregistre la poignée de la DLL OldHandle: = application.handle; // Modifie la poignée de l'application DLL en poignée de fenêtre dans PB // Le but est d'atteindre que les fichiers exécutables de DLL et PB appartiennent à une application // Effet: après avoir ouvert la fenêtre dans la DLL, il n'y aura plus d'icône dans la barre des tâches Application.handle: = manche; Application.CreateForm (TForm1, Form1); essayer Form1.s_param: = strpas (param); Form1.showmodal; Enfin Form1.free; Application.handle: = oldHandle; fin; fin; exportations show_demo; Commencer DllProc: = @dllmain; Dllmain (dll_process_attach) fin. |