ข้อกำหนด : เนื่องจากเราได้รับโครงการดังกล่าวเมื่อเร็ว ๆ นี้พรรค A และคนอื่น ๆ ขอให้เราเพิ่มฟังก์ชั่นที่เราพัฒนาขึ้นเป็นแอปพลิเคชันที่พัฒนาขึ้นของ PB ที่พวกเขามีอยู่แล้ว จุดประสงค์เดียวคือไม่มีแอปพลิเคชัน EXE สองรายการ
วิธีแก้ปัญหา : แพ็คเกจแอปพลิเคชันของ Delphi ในรูปแบบของ DLL จากนั้นเรียกมันว่าใน PB
ออกแบบ :
1. ส่วน PB
1. สร้างคลาสที่ไม่ใช่ภาพใหม่ N_CST_DEMO และเราใส่การโทรทั้งหมดจากโมดูลเดียวกันในคลาสนี้
2. กำหนด API Call คำจำกัดความในการประกาศ --- ฟังก์ชั่นภายนอกท้องถิ่น
// handle: เป็นที่จับของหน้าต่างปัจจุบัน;
subroutine show_demo (ulong handle, string param) ไลบรารี "Project1.dll"
3. สร้างแบบฟอร์มใหม่ w_main
4. สร้างเมนูใหม่ m_dll
5. สร้างรายการเมนูที่เรียกว่า Test DLL เขียนในเหตุการณ์ที่คลิก:
n_cst_demo n_pda n_pda = สร้าง n_cst_demo N_PDA.SHOW_DEMO (มือจับ (ParentWindow), "ABCD1234"))) ทำลาย n_pda |
ด้วยวิธีนี้ส่วน PB ของเราเสร็จสมบูรณ์
2. ส่วน Delphi
1. สร้างโครงการ DLL ใหม่
2. สร้าง Form1 ใหม่ บันทึก.3. เขียนรหัสในโครงการ:
โครงการห้องสมุด 1; ใช้ Sysutils แบบฟอร์ม หน้าต่าง ชั้นเรียน ควบคุม บทสนทนา 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: เริ่มต้น; dll_thread_detach: เริ่มต้น; จบ จบ; // โปรดจำไว้ว่าใน Delphi พารามิเตอร์สตริงจะต้องถูกกำหนดด้วยประเภท pchar ขั้นตอน show_demo (ด้าม: thandle; const param: pchar); วาจา Oldhandle: Thandle; เริ่ม // บันทึกที่จับของ 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) จบ. |