Persyaratan : Karena kami menerima proyek seperti itu baru -baru ini, Pihak A dan yang lainnya meminta kami untuk menambahkan fungsi yang kami kembangkan ke aplikasi yang dikembangkan PB yang sudah mereka miliki. Satu -satunya tujuan adalah tidak memiliki dua aplikasi EXE.
Solusi : Paket aplikasi Delphi dalam bentuk DLL dan kemudian panggil di PB.
desain :
1. Bagian PB
1. Buat kelas non-visual baru N_CST_DEMO, dan kami memasukkan semua panggilan dari modul yang sama ke dalam kelas ini.
2. Tentukan panggilan API. Definisi dalam Deklarasi --- Fungsi Eksternal Lokal
// pegangan: adalah pegangan jendela saat ini;
Subroutine show_demo (ulong handle, string param) pustaka "Project1.dll"
3. Buat formulir baru W_Main.
4. Buat menu baru M_DLL.
5. Buat item menu yang disebut test dll. Tulis di acara yang diklik:
n_cst_demo n_pda n_pda = buat n_cst_demo n_pda.show_demo (handle (parentWindow), "abcd1234") Hancurkan n_pda |
Dengan cara ini, bagian PB kami selesai.
2. Bagian Delphi
1. Buat proyek DLL baru.
2. Buat form1 baru. menyimpan.3. Tulis kode dalam proyek:
Proyek Perpustakaan1; penggunaan Sysutils, Bentuk, Windows, Kelas, Kontrol, Dialog, Unit1 di 'unit1.pas' {form1}, Dm di 'dm.pas' {datamodule1: tdatamodule}; {$ R *.res} Prosedur DLLMain (Alasan: Integer); Mulai alasan kasus DLL_PROCESS_ATTACH: Mulai application.createForm (tdatamodule1, datamodule1); akhir; DLL_PROCESS_DETACH: Mulai akhir; Dll_thread_attach: mulai akhir; Dll_thread_detach: mulai akhir; akhir akhir; // Ingat, di Delphi, parameter string perlu didefinisikan dengan tipe pchar Prosedur show_demo (pegangan: thandle; const param: pchar); var Oldhandle: Thandle; Mulai // Simpan pegangan DLL Oldhandle: = Application.Handle; // Ubah pegangan aplikasi DLL ke pegangan jendela di PB // Tujuannya adalah untuk mencapai file yang dapat dieksekusi dari DLL dan PB termasuk dalam aplikasi // Efek: Setelah membuka jendela di DLL, tidak akan ada ikon lagi di bilah tugas Application.handle: = handle; Application.createForm (tform1, form1); mencoba Form1.s_param: = strpas (param); Form1.showmodal; Akhirnya Form1. bebas; Application.Handle: = Oldhandle; akhir; akhir; ekspor show_demo; Mulai DLLPROC: = @dllMain; DLLMAIN (DLL_PROCESS_ATTACH) akhir. |