Требования : С тех пор, как мы получили такой проект в последнее время, сторона А и другие попросили нас добавить функции, которые мы разработали в разработанное PB -приложение, которое у них уже есть. Единственная цель - не иметь двух приложений EXE.
Решение : Пакет приложения Delphi в виде DLL, а затем вызовите его в PB.
дизайн :
1. ПБ часть
1. Создайте новый невизуальный класс N_CST_DEMO, и мы помещаем все вызовы из одного и того же модуля в этот класс.
2. Определите вызовы API. Определение в Declare --- локальные внешние функции
// Руководство: ручка текущего окна;
Subroutine show_demo (ulong hander, string param) библиотека "Project1.dll"
3. Создайте новую форму w_main.
4. Создайте новое меню m_dll.
5. Создайте элемент меню с именем Test DLL. Напишите в событии Clicked:
n_cst_demo n_pda n_pda = create n_cst_demo n_pda.show_demo (handle (parentwindow), "abcd1234") Уничтожить n_pda |
Таким образом, наша часть PB завершена.
2. Дельфи Часть
1. Создайте новый проект DLL.
2. Создайте новую форму1. сохранять.3. Записать код в проекте:
Библиотечный проект1; Использование Sysutils, Формы, Windows, Классы Управление, Диалоги, UNIT1 в 'Unit1.pas' {form1}, DM в 'dm.pas' {dataModule1: tdatamodule}; {$ R *.res} процедура dllMain (причина: целое число); Начинать Случай причина Dll_process_attach: Начинать Application.createform (tdatamodule1, dataModule1); конец; Dll_process_detach: Начинать конец; Dll_thread_attach: begin end; Dll_thread_detach: begin end; конец конец; // Помните, в Delphi необходимо определить параметры строк Процедура show_demo (ручка: thandle; const param: pchar); вар OldHandle: Тандл; Начинать // Сохранить ручку DLL OldHandle: = Application.Handle; // Измените дескриптор приложения DLL на ручку окна в PB // Цель состоит в том, чтобы достичь того, что исполняемые файлы DLL и PB принадлежат приложению // эффект: после открытия окна в DLL больше не будет значка на панели задач Application.handle: = handle; Application.createform (tform1, form1); пытаться Form1.s_param: = strpas (param); Form1.showmodal; Окончательно Form1.free; Application.handle: = OldHandle; конец; конец; экспорт show_demo; Начинать Dllproc: = @dllmain; Dllmain (dll_process_attach) конец. |