Requisitos : dado que recibimos dicho proyecto recientemente, la parte A y otros nos pidieron que agregaramos las funciones que desarrollamos a una aplicación desarrollada por PB que ya tienen. El único propósito es no tener dos aplicaciones EXE.
Solución : la aplicación de paquete de Delphi en forma de DLL y luego llámela en el PB.
diseño :
1. Parte de Pb
1. Cree una nueva clase no visual N_CST_DEMO, y ponemos todas las llamadas del mismo módulo en esta clase.
2. Defina las llamadas API. Definición en declarar --- Funciones externas locales
// Mango: es el mango de la ventana actual: otros parámetros requeridos
Subroutine show_demo (Handle Ulong, String Param) Biblioteca "Project1.dll"
3. Cree una nueva forma w_main.
4. Cree un nuevo menú m_dll.
5. Cree un elemento de menú llamado Test Dll. Escribe en el evento hecho hecho:
n_cst_demo n_pda n_pda = crear n_cst_demo n_pda.show_demo (Handle (ParentWindow), "ABCD1234") Destruir n_pda |
De esta manera, nuestra parte PB está completa.
2. Parte de Delphi
1. Cree un nuevo proyecto DLL.
2. Cree un nuevo formulario1. ahorrar.3. Escribir código en el proyecto:
Proyecto de biblioteca1; usos Sysutils, Formularios, Windows, Clases, Controles, Diálogo, Unidad1 en 'unit1.pas' {form1}, Dm en 'dm.pas' {datAmodule1: tdatamodule}; {$ R *.res} procedimiento dllMain (razón: entero); Comenzar caso de caso de Dll_process_attach: Comenzar Application.CreateForm (TDATAmodule1, DataModule1); fin; Dll_process_detach: Comenzar fin; Dll_thread_attach: comienza end; Dll_thread_detach: begin end; fin fin; // Recuerde, en Delphi, los parámetros de cadena deben definirse con el tipo PCHAR procedimiento show_demo (manejar: thandle; const par par: pchar); varilla Oldhandle: Thandle; Comenzar // Guardar el mango de la dll OldHandle: = Application.Handle; // Cambie el mango de la aplicación DLL al mango de la ventana en PB // El propósito es lograr que los archivos ejecutables de DLL y PB pertenezcan a una aplicación // Efecto: después de abrir la ventana en el DLL, no habrá más icono en la barra de tareas Application.Handle: = Handle; Application.CreateForm (TForm1, Form1); intentar Form1.s_param: = strpas (param); Form1.showmodal; Finalmente Form1.free; Application.Handle: = OldHandle; fin; fin; exportaciones show_demo; Comenzar Dllproc: = @dllmain; DllMain (dll_process_attach) fin. |