ASP การบรรยายที่ 10: เขียนส่วนประกอบด้วยตัวเอง
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-05-30 19:54:53
ในเนื้อหาก่อนหน้านี้ เราได้เรียนรู้วิธีใช้ส่วนประกอบต่างๆ แม้ว่าจะมีส่วนประกอบมากมายบนอินเทอร์เน็ต แต่ส่วนประกอบเล็กๆ มักจะกำหนดให้คุณต้องจ่ายเงินเป็นดอลลาร์สหรัฐ และมีส่วนประกอบที่ผลิตในประเทศน้อยเกินไป หากคุณต้องการใช้จ่าย RMB บางส่วน คุณไม่สามารถหาสถานที่ได้ มันง่าย ลืมมันซะเถอะ แค่เขียนมันเอง จริงๆ แล้วการเขียนส่วนประกอบนั้นไม่ใช่เรื่องยาก มันเป็นเพียงเรื่องของการเริ่มต้นเขียนส่วนประกอบระดับต่ำและค่อยๆ เริ่มเขียนส่วนประกอบระดับสูง ในการเขียน ActiveX Server Components มีเครื่องมือมากมายให้เลือก: Visual Basic, C++, Java ฯลฯ ที่นี่เราเลือก VB6.0 ที่ง่ายที่สุด ตราบใดที่คุณเคยใช้ VB มาก่อน คุณสามารถสร้างได้ภายในเวลาไม่ถึง 1 ชั่วโมง วิดเจ็ตออกมา
1. การเขียนส่วนประกอบอย่างรวดเร็ว - ขั้นตอนพื้นฐานที่สุดสำหรับการเขียนส่วนประกอบ ส่วนนี้จะอธิบายขั้นตอนพื้นฐานสำหรับการเขียนส่วนประกอบเป็นหลัก หากคุณต้องการเรียนรู้เพิ่มเติม โปรดดูส่วน "การสร้าง ActiveX DLL" ในวิธีใช้ VB6.0 เอกสาร (เอกสารใน MSDN Library ชื่อไฟล์คือ Vbcon98.chm)
วัตถุประสงค์: เขียนส่วนประกอบ adder ที่ง่ายที่สุด องค์ประกอบนี้มีคุณสมบัติสองประการและหนึ่งวิธี เริ่มจากจุดที่คุ้นเคยที่สุด ซึ่งก็คือสมมติว่าส่วนประกอบนี้มีอยู่แล้ว และดูโค้ดที่ใช้ส่วนประกอบนี้ใน ASP:
-
ติ่ม objSum
'สร้างส่วนประกอบก่อน ตัวระบุส่วนประกอบคือ TestDll.Sum
ตั้งค่า objSum = Server.CreateObject("TestDll.Sum")
'จำ "TestDll", "Sum" ใน TestDll.Sum
objSum.augend = 10.52 'แอตทริบิวต์ augend คือผลรวม
objSum.addend = 382.41 'แอตทริบิวต์การเพิ่มคือการเพิ่มเติม
ผลลัพธ์ = objSum.Plus 'ผลรวมวิธีบวก
การตอบสนองเขียนผลลัพธ์
ตั้งค่า objSum = ไม่มีเลย
-
โปรดอย่าลืมจำคำหลักเหล่านี้: TestDll, Sum, augend, addend, Plus ซึ่งจะเกี่ยวข้องอย่างใกล้ชิดกับงานถัดไป นี่คือขั้นตอนโดยละเอียด:
1. เรียกใช้ VB6.0 ในเมนู "ไฟล์" คลิก "โครงการใหม่" → ในกล่องโต้ตอบ "โครงการใหม่" ดับเบิลคลิกที่ไอคอน "ActiveX DLL" → Visual Basic จะเพิ่มโมดูลคลาสให้กับใหม่โดยอัตโนมัติ โครงการ Class1 (สามารถดูได้ใน "Project Explorer" ดังแสดงในรูปที่ 1)
2. กดปุ่ม F4 เพื่อเปิดหน้าต่างคุณสมบัติ คลิกสองครั้งที่แอตทริบิวต์ "ชื่อ" และเปลี่ยน "Class1" เป็น Sum
3. บนเมนูโครงการ คลิกคุณสมบัติโครงการ 1 เพื่อเปิดกล่องโต้ตอบคุณสมบัติโครงการ กรอก TestDll ใน "ชื่อโครงการ" และ "สร้างตัวอย่าง ActiveX DLL" ใน "คำอธิบายโครงการ" ดังแสดงในรูปที่ 2
เคล็ดลับ: คุณเข้าใจความหมายของตัวระบุสองตัว TestDLL.Sum ในคอมโพเนนต์การสร้าง ASP หรือไม่
4. ในเมนู "ไฟล์" คลิก "บันทึกโครงการ" และบันทึกไฟล์โครงการด้วยชื่อต่อไปนี้: SetupDll.cls และ SetupDll.vbp
5. สร้างคุณสมบัติสำหรับคลาส Sum:
(1) ในเมนู "เครื่องมือ" เลือก "เพิ่มกระบวนการ" เพื่อเปิดกล่องโต้ตอบ "เพิ่มกระบวนการ" ในกล่อง "ชื่อ" ให้ป้อน augen คลิก "คุณสมบัติ" จากนั้นคลิก "ตกลง" ดังแสดงในรูปที่ 3 (หมายเหตุ: โฟกัสปัจจุบันควรอยู่ที่หน้าต่างโค้ด มิฉะนั้นเมนู "เพิ่มขั้นตอน" จะไม่ถูกต้อง ).
(2) ในเมนู "เครื่องมือ" เลือก "เพิ่มกระบวนการ" เพื่อเปิดกล่องโต้ตอบ "เพิ่มกระบวนการ" ในกล่องชื่อ ใส่เพิ่ม คลิกคุณสมบัติ จากนั้นคลิกตกลง
6. สร้างวิธีการสำหรับคลาส Sum:
บนเมนูเครื่องมือ คลิกเพิ่มขั้นตอน เพื่อเปิดกล่องโต้ตอบเพิ่มขั้นตอน ในช่อง "ชื่อ" ให้ป้อนเครื่องหมายบวก ในประเภท คุณสามารถเลือก "รูทีนย่อย" หรือ "ฟังก์ชัน" ได้ ในตัวอย่างนี้ เนื่องจากคุณต้องการส่งคืนผลรวมของการเพิ่มและผลรวม ให้คลิก "ฟังก์ชัน" จากนั้นคลิก คลิกตกลง
ตอนนี้คำหลักห้าคำในโค้ด ASP ก่อนหน้านี้ได้ถูกนำมาใช้แล้ว ดังนั้น ตอนนี้คุณจึงเข้าใจสิ่งต่างๆ มากมายแล้ว
7. รหัสทั้งหมดในหน้าต่างรหัสผลรวมของโมดูลคลาสมีดังนี้:
ตัวเลือกที่ชัดเจน
mdbl_augend ส่วนตัวเป็นสองเท่า
mdbl_addend ส่วนตัวเป็นสองเท่า
ทรัพย์สินสาธารณะรับ augend() เป็นสองเท่า
สิงหาคม = mdbl_augend
สิ้นสุดคุณสมบัติ
ทรัพย์สินสาธารณะให้ augend (ByVal vNewValue As Double)
mdbl_augend = vNewValue
สิ้นสุดคุณสมบัติ
ทรัพย์สินสาธารณะรับ addend() เป็นสองเท่า
เพิ่ม = mdbl_addend
สิ้นสุดคุณสมบัติ
ทรัพย์สินสาธารณะให้เพิ่ม (ByVal vNewValue As Double)
mdbl_addend = vNewValue
สิ้นสุดคุณสมบัติ
ฟังก์ชั่นสาธารณะพลัส()
บวก = เพิ่ม + เพิ่ม
ฟังก์ชันสิ้นสุด
คุณสังเกตเห็นว่าโค้ดด้านบนแตกต่างจากโค้ดที่ระบบสร้างขึ้นเล็กน้อย เนื่องจากส่วน Public Property Get augend() As Variant ถูกแทนที่ด้วยประเภทข้อมูลจริง Double
หมายเหตุ: ในความเป็นจริง เมื่อดำเนินการคำสั่ง x = objSum.augend กระบวนการ Property Get จะถูกเรียกเพื่อรับค่า mdbl_augend เมื่อดำเนินการคำสั่ง objSum.augend = 10.52 กระบวนการ Property Let จะถูกเรียกใช้และกำหนด 10.52 ถึง mdbl_augend
8. ขั้นตอนสุดท้ายคือการคลิก "สร้าง .Dll(K)..." ในเมนู "ไฟล์" เพื่อสร้างไฟล์ SetupDll.dll
ณ จุดนี้ ส่วนประกอบได้ถูกสร้างขึ้นแล้ว ตอนนี้เราสามารถเขียนโปรเจ็กต์ทดสอบใน VB6 เพื่อทดสอบว่าไฟล์ถูกต้องหรือไม่
1. ในเมนู "ไฟล์" คลิก "โครงการใหม่" → ดับเบิลคลิก "Standard EXE"
2. ในเมนู "โครงการ" คลิก "อ้างอิง" → กดปุ่ม "เรียกดู" ในกล่องโต้ตอบ "อ้างอิง" เลือกไฟล์ "SetupDll.dll" ที่เพิ่งคอมไพล์ → คลิก "ตกลง"
3. สุดท้ายเขียนโค้ดต่อไปนี้ในหน้าต่างโค้ด:
ตัวเลือกที่ชัดเจน
แบบฟอร์มย่อยส่วนตัว_Load()
Dim objSum เป็น TestDll.Sum
ตั้งค่า objSum = ผลรวมใหม่
objSum.augend = 10.52
objSum.addend = 382.41
MsgBox objSum.Plus
จบหมวดย่อย
เรียกใช้และผลลัพธ์ถูกต้อง ต่อไปเราจะใช้ส่วนประกอบนี้ใน ASP คัดลอก SetupDll.dll ไปยังเว็บเซิร์ฟเวอร์ และใช้คำสั่ง "Regsvr32.exe setupdll.dll" เพื่อลงทะเบียนคอมโพเนนต์ จากนั้นรันโปรแกรม ASP ที่จุดเริ่มต้นของส่วนนี้ในเบราว์เซอร์ หากไม่ได้ผล คุณสามารถลองจัดแพ็คเกจด้วยเครื่องมือบรรจุภัณฑ์ VB6 ก่อน จากนั้นจึงทำการติดตั้ง ส่วนประกอบต่างๆ จะถูกลงทะเบียนโดยอัตโนมัติ และไฟล์ที่ทำงานอยู่ VB6 ที่จำเป็นบางส่วนจะถูกติดตั้งโดยอัตโนมัติด้วย
หมายเหตุ: โปรแกรมทั้งหมดในส่วนนี้อยู่ใน Setupdll.zip ของแพ็คเกจดาวน์โหลด
ในตัวอย่างข้างต้น เราใช้ขั้นตอนคุณสมบัติ Property Get และ Property Let เพื่อเพิ่มคุณสมบัติ (Property Get อ่านมูลค่าของคุณสมบัติ และ Property Let กำหนดค่าให้กับคุณสมบัติ) หากคุณต้องการตรวจสอบค่าที่ตั้งไว้ คุณสามารถทำได้ เขียนโค้ดที่เหมาะสมในกระบวนการ Property Let เช่นรหัสต่อไปนี้:
ทรัพย์สินสาธารณะให้ augend (ByVal vNewValue As Double)
ถ้า vNewValue < 100 แล้ว
MsgBox "คุณกำลังทำอะไรอยู่! ถ้าค่าน้อยกว่า 100 ให้คำนวณด้วยตัวเอง"
อื่น
mdbl_augend = vNewValue
สิ้นสุดถ้า
สิ้นสุดคุณสมบัติ
2. วิธีอื่นๆ ในการเพิ่มคุณสมบัติและวิธีการให้กับส่วนประกอบ
1. วิธีที่ง่ายที่สุดในการเพิ่มแอตทริบิวต์: เพิ่มตัวแปรสาธารณะ ดังตัวอย่างข้างต้น รหัสที่ง่ายที่สุดจะเป็นดังนี้:
ตัวเลือกที่ชัดเจน
สาธารณะ augend As Double ' เพิ่มแอตทริบิวต์ augend
เพิ่มสาธารณะเป็นสองเท่า ' เพิ่มแอตทริบิวต์เพิ่ม
ฟังก์ชั่นสาธารณะ Plus() เป็นสองเท่า
บวก = เพิ่ม + เพิ่ม
ฟังก์ชันสิ้นสุด
อย่างไรก็ตาม วิธีนี้สามารถตั้งค่าคุณสมบัติการอ่าน/เขียนเท่านั้น และไม่สามารถตรวจสอบค่าที่กำหนดได้ หากคุณต้องการเพิ่มแอ็ตทริบิวต์แบบอ่านอย่างเดียวเท่านั้น: ในตัวอย่างข้างต้น ให้ลบกระบวนการ Public Property Let augend(ByVal vNewValue As Double) จากนั้น augend จะกลายเป็นแอ็ตทริบิวต์แบบอ่านอย่างเดียวและไม่สามารถกำหนดค่าได้ แน่นอน หากคุณต้องการเพิ่มคุณสมบัติแบบเขียนอย่างเดียว เพียงลบขั้นตอนรับคุณสมบัติ
2. การใช้ยูทิลิตี้ตัวสร้างคลาส
นอกจากนี้ยังมีเครื่องมือสำหรับการเพิ่มคุณสมบัติและวิธีการใน VB6: ในเมนู "Add-in" คลิก "Add-in Manager" เลือก "VB Class Builder Utility" ในกล่องโต้ตอบ Add-in Manager ที่ปรากฏขึ้น และ load เลือก "Load/Unload" ในลักษณะการทำงาน (รูปที่ 4) จากนั้นคลิก Class Builder Utility ในเมนู Add-Ins แล้วคุณจะรู้วิธีใช้งาน
3. บอกคุณบางประเด็นที่ต้องใส่ใจ
1. ตัวอย่างข้างต้นเป็นส่วนประกอบที่ง่ายมาก โดยทั่วไปแล้วส่วนประกอบที่ใช้งานจริงจะมีอย่างน้อยหนึ่งโมดูล
2. ถ้าคุณไม่ระวัง Visual Basic สามารถสร้างคอมโพเนนต์ "เธรดเดียว" ได้
บางทีข้อผิดพลาดที่พบบ่อยที่สุดอย่างหนึ่งคือการใช้ส่วนประกอบที่ไม่ได้ออกแบบมาให้ทำงานภายใต้ ASP เช่น ส่วนประกอบ "single-threaded" ดังนั้น ตรวจสอบให้แน่ใจว่าโมดูลเธรดถูกตั้งค่าเป็น "การเธรดอพาร์ทเมนท์" บนแท็บ "ทั่วไป" ของหน้า "คุณสมบัติโครงการ"
3. เกี่ยวกับข้อผิดพลาด "ประเภทไม่ตรงกัน"
คำแนะนำที่ดีคือการประกาศพารามิเตอร์ Out เป็น Variant โปรดทราบว่าไม่ได้ตั้งค่าไว้ในตัวอย่างข้างต้น
4. เกี่ยวกับการใช้ตัวแปรโกลบอล
พยายามหลีกเลี่ยงการใช้ตัวแปรโกลบอลในส่วนประกอบ ในแง่ Visual Basic หมายความว่าไม่มีตัวแปรสาธารณะหรือส่วนกลางในโมดูล .BAS มาตรฐาน เพราะตัวแปรโกลบอลไม่ใช่โกลบอลอย่างแท้จริง แต่ละเธรดมีสำเนาของตัวเอง และหากมีการดำเนินการหลายวิธีในเธรดเดียวกัน พวกเขาจะเห็นตัวแปรเดียวกัน มิฉะนั้น จะเข้าถึงสำเนาที่แตกต่างกันของตัวแปรเหล่านี้ ซึ่งหมายความว่าคุณอาจกำหนดค่าให้กับตัวแปรร่วม (ในเธรด A) แต่ผู้ใช้รายอื่น (ดำเนินการในเธรด B) ไม่สามารถมองเห็นค่าใหม่ได้ เหตุผลก็คือ Visual Basic ใช้ "Thread Local Storage (TLS)" ภายในเพื่ออ้างอิงตัวแปรส่วนกลาง ซึ่งหมายความว่าแต่ละเธรดมีสำเนาของตัวแปร Public เป็นของตัวเอง และเนื่องจากมีสำเนาหลายชุด ข้อมูลส่วนกลางจึงไม่ใช่ "ทั่วโลก" จริงๆ นั่นคือ ผู้ใช้ที่ทำงานอยู่ในเธรดเดียวกันจะเข้าถึงตัวแปรเดียวกัน ไม่ว่าพวกเขาจะคาดหวังหรือไม่ก็ตาม
ในที่สุด VB6.0 ก็ได้แนะนำแอปพลิเคชัน Visual Basic ประเภทใหม่: แอปพลิเคชัน IIS คุณสามารถสร้างแอปพลิเคชัน IIS ได้เช่นเดียวกับที่คุณสร้าง ActiveX DLLs แอปพลิเคชันใด ๆ ที่สร้างด้วย Active Server Pages สามารถสร้างได้ในสภาพแวดล้อมการพัฒนา VB คุณสามารถแทนที่ Active Server Pages ทั้งหมดด้วยแอปพลิเคชัน VB เดียวได้