ส่วนที่หนึ่งของชุด Basic Introduction และ Mastery of Asp Components
ฉันอยากจะเขียนแอปพลิเคชันส่วนประกอบบางอย่างมาโดยตลอด ในช่วงเวลานี้ ในที่สุดฉันก็สามารถเขียนสิ่งที่ฉันชอบได้
ฉันหวังว่าหลังจากศึกษาบทช่วยสอนเหล่านี้แล้ว คุณจะสามารถเขียนส่วนประกอบของคุณเองได้ตามที่คุณต้องการ
แต่ละบทความอาจไม่เกี่ยวข้องกัน แต่เขียนเกี่ยวกับปัญหาบางอย่างที่เกิดขึ้นระหว่างการเขียนส่วนประกอบ
ยินดีต้อนรับทุกท่านที่จะวิพากษ์วิจารณ์และแก้ไข
สภาพแวดล้อม: winxp+vb6+sp6+visual interdev6.0
ในบทความแรก เรามาเขียนส่วนประกอบที่ค่อนข้างง่าย
ซึ่งทำหน้าที่ต่อไปนี้: ป้อนตัวเลขสองตัวแล้วบวกกลับ ส่งคืนผลลัพธ์ที่เพิ่ม
เปิด vb6 และสร้างโปรเจ็กต์ Activex Dll ใหม่
เปลี่ยนชื่อโปรเจ็กต์เป็น fComและ
ชื่อคลาสเป็น fC1
คลิก Menu->Tools-
>Add Process
จะพยายามปรับปรุงต่อไป
รหัสโปรแกรม
ตัวเลือกที่ชัดเจน
ฟังก์ชั่นสาธารณะเพิ่ม (ByVal a As Long, ByVal b As Long) ตราบเท่าที่
เพิ่ม=ก+ข
ฟังก์ชันสิ้นสุด
ตกลง มีการเขียนส่วนประกอบอย่างง่ายแล้ว คลิกเมนู -> ไฟล์ -> สร้างไฟล์ fCom.dll
เพื่อยืนยัน จะมีไฟล์ fCom.dll อยู่ในไดเรกทอรี
ทดสอบ
เปิด Visual interdev6.0 และสร้างไฟล์ asp ใช้มันไหม Interdev เนื่องจากมีฟังก์ชั่นพร้อมท์โค้ดซึ่งสอดคล้องกับสภาพแวดล้อม IDE ของ VB และสะดวกในการเขียน
รหัสโปรแกรม
<%@ ภาษา=VBScript %>
<HTML>
<หัว>
<ชื่อเมตา = "เครื่องกำเนิดไฟฟ้า" เนื้อหา = "Microsoft Visual Studio 6.0">
</HEAD>
<ร่างกาย>
-
ตั้ง obj=server.CreateObject("fCom.fC1")
'โปรดใส่ใจกับประโยคต่อไปนี้ เนื่องจากฟังก์ชันมีค่าส่งคืน คุณไม่สามารถเขียนด้วยวิธีต่อไปนี้ได้ ไม่เช่นนั้นข้อผิดพลาดจะถูกรายงานใน IE
'obj.Add(3,4)
'ประเภทข้อผิดพลาด:
'ข้อผิดพลาดของคอมไพเลอร์ Microsoft VBScript (0x800A0414)
'คุณไม่สามารถใช้วงเล็บเมื่อเรียกรูทีนย่อยได้
'/xml/fc1.asp บรรทัด 9 คอลัมน์ 12
'obj.เพิ่ม(3,4)
'ต่อไปนี้คือวิธีการเขียนที่ถูกต้อง'
สลัวค
c=obj.เพิ่ม(3,4)
ตอบกลับเขียนค
-
</ร่างกาย>
</HTML>
กำหนดค่าไดเร็กทอรีเสมือน รันไฟล์ asp นี้ใน IE และรับผลลัพธ์ 7
บทความแรกจบลงแล้ว ฉันหวังว่าคุณทุกคนจะมีความสุขกับการศึกษา
Asp Components บทนำพื้นฐานและ Mastery Series 2
วิธีลงทะเบียนส่วนประกอบ
1. เส้นทางสัมบูรณ์ขององค์ประกอบ regsvr32
มีดังนี้:
รหัสโปรแกรม
regsvr32 c:testfc1.dll
เนื่องจากส่วนประกอบสามารถใช้งานได้ตราบใดที่มีการลงทะเบียน จึงไม่เกี่ยวข้องกับตำแหน่งของส่วนประกอบ
2.
เมื่อใดที่จำเป็นต้องลงทะเบียนเมื่อลงทะเบียนในตัวจัดการส่วนประกอบ COM+
: ส่วนประกอบจะต้องได้รับการลงทะเบียนก่อนจึงจะสามารถทำงานได้ตามปกติหลังจากใช้บริการ COM+ หากส่วนประกอบนั้นลงทะเบียนกับ regsvr32 เท่านั้น ก็ยังไม่สามารถใช้งานได้
วิธีใช้ส่วนประกอบ
รหัสโปรแกรม
set obj=server.createobject("ชื่อโครงการ ชื่อคลาส")
จากนั้นเรียกแอตทริบิวต์วิธีการของมัน
วิธีถอนการติดตั้งส่วนประกอบ
1 เส้นทางสัมบูรณ์ขององค์ประกอบ regsvr32
มีดังนี้:
รหัสโปรแกรม
regsvr32 c:testfc1.dll /u
คุณ ส่วนประกอบต่อต้านการลงทะเบียนพารามิเตอร์
2 เพียงลบส่วนประกอบในตัวจัดการส่วนประกอบ COM+
รายการส่วนประกอบ Asp และซีรี่ส์การเรียนรู้ส่วนที่สาม:
วิธีใช้คุณสมบัติ
เพื่อเปิด vb6 และสร้างโครงการ Activex Dll ใหม่ เปลี่ยนชื่อโปรเจ็กต์เป็น fCom และชื่อคลาสเป็น fC2
คลิกเมนู -> เครื่องมือ -> เพิ่มกระบวนการ
เราป้อน myName ในชื่อ เลือกแอตทริบิวต์เป็นประเภท เลือกสาธารณะเป็นขอบเขต จากนั้นยืนยัน
การดำเนินการอีกครั้ง: ป้อนอายุในชื่อ เลือกแอตทริบิวต์เป็นประเภท เลือกสาธารณะในขอบเขต จากนั้นยืนยัน
และดำเนินการอีกครั้ง: ป้อน peopleInfo ในชื่อ เลือกฟังก์ชันเป็นประเภท เลือกสาธารณะในขอบเขต จากนั้นยืนยัน
รหัส เป็นดังนี้:
รหัสโปรแกรม
ตัวเลือกที่ชัดเจน
'ตัวแปรท้องถิ่นที่เก็บค่าแอตทริบิวต์สามารถใช้ได้เฉพาะในคลาสเท่านั้น
mvarmyName ส่วนตัวเป็นสตริง
mvarAge ส่วนตัวเป็นจำนวนเต็ม
'ให้เขียนคุณลักษณะ (ให้คุณลักษณะ: กระบวนการนี้จะกำหนดค่าให้กับคุณลักษณะ)
ทรัพย์สินสาธารณะให้อายุ (ByVal vData As Integer)
mvarAge = vData
สิ้นสุดคุณสมบัติ
'รับแอตทริบิวต์การอ่าน (กระบวนการนี้รับค่าของแอตทริบิวต์)
ทรัพย์สินสาธารณะรับอายุ () เป็นจำนวนเต็ม
อายุ = mvarAge
คุณสมบัติสุดท้าย
คุณสมบัติสาธารณะ ให้ myName (ByVal vData As String)
mvarmyName = vData
คุณสมบัติสุดท้าย
ทรัพย์สินสาธารณะ รับ myName() เป็นสตริง
myName = mvarmyName
สิ้นสุด
คุณสมบัติฟังก์ชั่นสาธารณะ peopleInfo() As String
peopleInfo = "ชื่อ: " & mvarmyName & " อายุ: " & mvarAge
ฟังก์ชันสิ้นสุด
ตกลง มีการเขียนส่วนประกอบอย่างง่ายแล้ว คลิกเมนู -> ไฟล์ -> สร้างไฟล์ fCom.dll
เพื่อยืนยัน จะมีไฟล์ fCom.dll อยู่ในไดเรกทอรี
ทดสอบ
เปิด Visual interdev6.0 และสร้างไฟล์ asp ใช้มันไหม Interdev เนื่องจากมีฟังก์ชั่นพร้อมท์โค้ด สอดคล้องกับสภาพแวดล้อม IDE ของ VB และสะดวกสำหรับการเขียน
รหัสโปรแกรม
<%@ ภาษา=VBScript %>
<HTML>
<ร่างกาย>
-
ตั้ง obj=server.CreateObject("fCom.fC2")
สลัวค
'สิ่งที่เรียกว่านี่คือคุณสมบัติ Let ของส่วนประกอบ
obj.myName="ทอร์นาโด"
obj.อายุ =20
c=obj.peopleInfo()
ตอบกลับเขียนค
'สิ่งที่เรียกว่านี่คือคุณสมบัติ Get ของส่วนประกอบ
ตอบกลับเขียน "<br>"
ตอบกลับเขียน obj.myName
ตอบกลับเขียน "<br>"
การตอบสนองเขียน obj.อายุ
-
</ร่างกาย>
</HTML>
กำหนดค่าไดเร็กทอรีเสมือนและรันไฟล์ asp นี้ใน IE ผลลัพธ์มีดังนี้:
ชื่อ: ทอร์นาโด อายุ: 20
พายุทอร์นาโด
20
ที่จะดำเนินต่อไป
การแนะนำระดับเริ่มต้นของส่วนประกอบ Asp และชุดการเรียนรู้ 4
ปัญหาเกี่ยวกับอาร์เรย์ อาร์เรย์
ถูกใช้บ่อยในโปรแกรม และมีแนวโน้มที่จะทำให้เกิดปัญหามากขึ้น
ลองมาดูผ่านตัวอย่างเล็กๆ น้อยๆ
แล้วสร้างใหม่ โครงการ Activex Dll เปลี่ยนชื่อโปรเจ็กต์เป็น fCom และชื่อคลาสเป็น fC4
คลิก Menu->Tools->Add Process
ในชื่อ เลือกรูทีนย่อยเป็นประเภท เลือก public เป็นช่วง จากนั้นยืนยัน
การดำเนินการอีกครั้ง: enter AcceptArray2 ในชื่อ และเลือกฟังก์ชันเป็นประเภท เลือกสาธารณะเป็นขอบเขต จากนั้นยืนยัน
รหัสโปรแกรม
'ฟังก์ชัน: ส่งที่อยู่อาร์เรย์ไปยังส่วนประกอบ ใช้คีย์เวิร์ด ByRef จากนั้นกำหนดและส่งคืน
AcceptArray1 ย่อยสาธารณะ (ByRef varray As Variant) เป็น Variant
varray(0) = "ทอร์นาโด"
วาเรย์(1) = "20"
End Sub
'ฟังก์ชัน: ส่งกลับอาร์เรย์สตริง
ฟังก์ชั่นสาธารณะ AcceptArray2() เป็นตัวแปร
หรี่ (2) เป็นตัวแปร
ก(0) = "ทอร์นาโด"
ก(1) = "20"
AcceptArray2=ก
ฟังก์ชั่นสิ้นสุด
ตกลง ส่วนประกอบถูกเขียน คลิกเมนู -> ไฟล์ -> สร้างไฟล์ fCom.dll
เพื่อยืนยัน จะมีไฟล์ fCom.dll อยู่ในไดเร็กทอรี
ทดสอบ
เปิด Visual interdev6.0 และสร้าง
โค้ดโปรแกรม
ไฟล์ asp
<%@ ภาษา=VBScript %>
<HTML>
<ร่างกาย>
-
วัตถุสลัว
ตั้ง obj = server.createobject("fCom.fC4")
สลัว(2)
'ทดสอบวิธีองค์ประกอบแรก
obj.AcceptArray1(ก)
การตอบกลับเขียน (0)
ตอบกลับเขียน "<br>"
ตอบกลับเขียน (1)
ตอบกลับเขียน "<br>"
'ทดสอบวิธีส่วนประกอบที่สอง
สลัวข
b=obj.AcceptArray2()
สำหรับ i=0 ถึง ubound(b)
การตอบสนองเขียน b(i)
ตอบกลับเขียน "<br>"
ต่อไป
-
</ร่างกาย>
</HTML>
กำหนดค่าไดเร็กทอรีเสมือนและรันไฟล์ asp นี้ใน IE ผลลัพธ์มีดังนี้:
ทอร์นาโด
20
พายุทอร์นาโด
20
สรุป:
สตริงและตัวเลขถูกส่งผ่านตามค่าหรือส่งคืนเป็นค่าส่งคืน
หากส่งผ่านโดยการอ้างอิง ให้ตั้งค่าประเภทของพารามิเตอร์เป็น Variant การทำเช่นนี้สามารถหลีกเลี่ยงข้อผิดพลาดบางอย่างได้
อย่างไรก็ตามให้
พยายามลดพารามิเตอร์ที่ส่งผ่านโดยการอ้างอิงให้มากที่สุด
เพื่อ
ดำเนินการต่อ
รหัสโปรแกรม
rs.Open strsql, conn,adOpenDynamic,adLockPessimistic
เมื่อพิมพ์ "," รายการประเภทเคอร์เซอร์หรือประเภทล็อคจะปรากฏขึ้นให้เลือก
บางครั้งเพื่อให้ง่ายขึ้น เราโดยตรง rs.open strsql,conn,1,3
วิธีแรกเป็นมืออาชีพมากกว่าหรือไม่ มาดูวิธี
เปิด vb6 ใน asp และสร้างโปรเจ็กต์ Activex Dll ใหม่ ชื่อโปรเจ็กต์เปลี่ยนเป็น fCom และชื่อคลาสเปลี่ยนเป็น fC5
รหัสโปรแกรม
ตัวเลือกที่ชัดเจน
'กำหนดประเภทการแจงนับ
อินเทอร์เฟซ Enum สาธารณะ
ไอซีเฟิร์ส = 1
ไอซีวินาที = 2
ไอสาม = 3
ไอซีโฟร์ = 4
icfive=5
ไอซีซิกซ์=6
ไอซีเซิร์ฟ=7
น้ำแข็ง = 8
สิ้นสุด Enum
'กำหนดฟังก์ชัน
ฟังก์ชั่นสาธารณะ CallDat (ByVal idig As Integer, ByVal ics As Interfacedig) เป็นตัวแปร
CallDat = idig * ics
ฟังก์ชั่นสิ้นสุด
ตกลง ส่วนประกอบถูกเขียน คลิกเมนู -> ไฟล์ -> สร้างไฟล์ fCom.dll
เพื่อยืนยัน จะมีไฟล์ fCom.dll อยู่ในไดเร็กทอรี
ทดสอบ
เปิด Visual interdev6.0 และสร้าง
โค้ดโปรแกรม
ไฟล์ asp
<%@ ภาษา=VBScript %>
<HTML>
<ร่างกาย>
-
'คำจำกัดความ คุณยังสามารถใส่ส่วนนี้ลงในไฟล์ได้ เช่นเดียวกับชุดบันทึกของ ado <!--#include file="adovbs.inc"-->
const icfirst = 1
const icsecond = 2
const icthree = 3
const icfour = 4
ค่าคงที่ icfive = 5
ค่าคงที่ icsix = 6
const icserven = 7
ค่าคงที่น้ำแข็ง = 8
ตั้ง obj=server.CreateObject("fCom.fc5")
'iceight หรือ 8 สามารถใช้ได้ที่นี่ แต่อันแรกทำให้โค้ดอ่านง่ายขึ้น
a= obj.CallDat(4,iceight)
ตอบกลับ เขียน ก
ตอบกลับเขียน "<br>"
a= obj.CallDat (4,8)
ตอบกลับ เขียน ก
-
<พี> </พี>
</ร่างกาย>
</HTML>
กำหนดค่าไดเร็กทอรีเสมือนและรันไฟล์ asp นี้ใน IE ผลลัพธ์จะเป็นดังนี้:
32
32
การจัดการข้อผิดพลาด
Mastery Series 6
หากมีข้อผิดพลาดบนเพจและไม่มีการจัดการข้อผิดพลาด เพจนั้นจะแสดงข้อผิดพลาดที่ผู้ใช้อาจไม่เข้าใจ
สามารถใช้ในสคริปต์ asp
รหัสโปรแกรม
เมื่อเกิดข้อผิดพลาด ดำเนินการต่อต่อไป
-
ถ้า Err.Number<>0 แล้ว
ตอบกลับ เขียนผิด คำอธิบาย
จบถ้า
แต่จะเกิดอะไรขึ้นถ้ามีอะไรผิดพลาดในส่วนประกอบ? วิธีนี้สามารถตรวจจับข้อผิดพลาดได้ แต่จะทราบข้อผิดพลาดเฉพาะได้อย่างไร
เราสามารถเพิ่มการจัดการข้อผิดพลาดให้กับส่วนประกอบเพื่อส่งคืนข้อผิดพลาด เพื่อให้เราสามารถดูข้อมูลข้อผิดพลาดโดยละเอียดเพิ่มเติมได้อย่างง่ายดาย และช่วยเราแก้ไขข้อผิดพลาด
ใช้ Err.Raise, Raise ใช้เพื่อสร้างข้อผิดพลาดรันไทม์
เปิด vb6 และสร้างโครงการ Activex Dll ใหม่ ชื่อโปรเจ็กต์เปลี่ยนเป็น fCom และชื่อคลาสเปลี่ยนเป็น fC6
รหัสโปรแกรม
ตัวเลือกที่ชัดเจน
สาธารณะย่อยshowerror1()
เมื่อเกิดข้อผิดพลาด GoTo ErrorHandle
หรี่ฉันเป็นสองเท่า
ผม=1/0
การจัดการข้อผิดพลาด:
Err.Raise Err.Number, Err.Source, Err.Description
สิ้นสุดย่อย
'สร้างข้อผิดพลาดที่กำหนดเอง
สาธารณะย่อยshowerror2()
Err.Raise 600, "ข้อผิดพลาดที่กำหนดด้วยตนเอง 600", "นี่เป็นข้อผิดพลาดในการอธิบายโปรแกรมของคุณเอง"
สิ้นสุด Sub
Ok คอมโพเนนต์ถูกเขียน คลิกเมนู -> ไฟล์ -> สร้างไฟล์ fCom.dll
เพื่อยืนยัน จะมีไฟล์ fCom.dll อยู่ในไดเร็กทอรี
ทดสอบ
เปิด Visual interdev6.0 และสร้าง
โค้ดโปรแกรม
ไฟล์ asp
<%@ ภาษา=VBScript %>
<HTML>
<ร่างกาย>
-
'ประโยคต่อไปนี้มีความสำคัญมาก
เมื่อเกิดข้อผิดพลาดดำเนินการต่อต่อไป
ตั้ง obj=server.CreateObject("fCom.fc6")
obj.showerror1()
'หากไม่มีการจัดการข้อผิดพลาด อินเทอร์เฟซข้อผิดพลาดจะถูกสร้างขึ้น ซึ่งไม่เป็นมืออาชีพมาก
'ช่วงตั้งแต่ 0–512 สงวนไว้สำหรับข้อผิดพลาดของระบบ; ช่วงตั้งแต่ 513–65535 สามารถใช้สำหรับข้อผิดพลาดที่ผู้ใช้กำหนดได้
'หากเป็นข้อผิดพลาดที่เก็บไว้ หมายเลขข้อผิดพลาดในส่วนประกอบจะสอดคล้องกับหมายเลขข้อผิดพลาดในการประมวลผลหน้า
ถ้า err.number <>0 แล้ว
การตอบสนองเขียน "ข้อความแสดงข้อผิดพลาด" & err.number & err.Description
สิ้นสุดถ้า
ตอบกลับเขียน "<br>"
'หากเป็นข้อผิดพลาดที่ผู้ใช้กำหนด ก็สามารถดำเนินการแยกกันได้ในหน้านั้น
obj.showerror2()
ถ้า err.number<>0 แล้ว
ถ้า err.number =600 แล้ว
Response.Write err.number & err.Source & err.คำอธิบาย
สิ้นสุดถ้า
สิ้นสุดถ้า
-
</ร่างกาย>
</HTML>
กำหนดค่าไดเรกทอรีเสมือนและดำเนินการไฟล์ asp นี้ใน IE ผลลัพธ์มีดังนี้:
ข้อความแสดงข้อผิดพลาด 11 ถูกหารด้วยศูนย์
600 ข้อผิดพลาดที่กำหนดด้วยตนเอง 600 นี่เป็นข้อผิดพลาดในการอธิบายโปรแกรมของคุณเอง
Asp Component Beginner's Introduction and Mastery Series ตอนที่ 7
เมื่อรันตัวอย่างในบทที่แล้ว คุณอาจพบปัญหาบางอย่าง ไม่มากก็น้อย
เช่น: หลังจากที่ส่วนประกอบถูก คอมไพล์แล้ว จะต้องมีการแก้ไข ข้อผิดพลาดเช่น "การอนุญาตถูกปฏิเสธ, 'f:csdnfcom.dll'" ฯลฯ เกิดขึ้น
เมื่อเรียกดูหน้า asp ให้เปิดตัวจัดการงานแล้วคุณจะเห็นกระบวนการของ dllhost.exe พร้อมชื่อผู้ใช้ IWAM_YANG IWAM_YANG จะแตกต่างกันไปขึ้นอยู่กับชื่อคอมพิวเตอร์
คุณสามารถใช้วิธีการต่อไปนี้เพื่อแก้ปัญหา
1. รีสตาร์ท iis
ค้นหาเครื่องมือการจัดการ -> บริการข้อมูลทางอินเทอร์เน็ต -> คลิกขวาที่คอมพิวเตอร์บนระดับที่สองของแผนผังทางด้านซ้ายในแผงควบคุม -> งานทั้งหมด -> รีสตาร์ท IIS
ในขณะนี้ คุณจะเห็นว่ากระบวนการ dllhost.exe ถูกปิดแล้ว
2. ข้อเสียของวิธีการข้างต้นคือขณะนี้เว็บไซต์ทั้งหมดปิดตัวลงจนกว่าจะรีสตาร์ท
มีวิธีแก้ไขสำหรับเว็บไซต์เดียวหรือไดเรกทอรีเสมือนหรือไม่ ค้นหา
เครื่องมือการดูแลระบบ -> บริการข้อมูลทางอินเทอร์เน็ต -> ค้นหาไดเรกทอรีเสมือนที่ส่วนประกอบของคุณกำลังทำงานอยู่ในแผงควบคุม -> คลิกขวาที่คุณสมบัติ -> ในไดเร็กทอรีเสมือนแรก -> การป้องกันแอปพลิเคชัน -> คลิกถอนการติดตั้ง
ในขณะนี้ คุณจะเห็นว่ากระบวนการ dllhost.exe ถูกปิดแล้ว
3. หากคุณพบว่ายุ่งยาก เพียงยุติกระบวนการโดยตรงใน Windows Task Manager
4 วิธีสุดท้าย
คือค้นหาเครื่องมือการจัดการในแผงควบคุม -> บริการคอมโพเนนต์ -> คลิกคอมพิวเตอร์, คอมพิวเตอร์ของฉัน, กระบวนการที่กำลังทำงานอยู่ -> IIS Out-Of-Process Pooled Applications (2860) -> คลิกขวาเพื่อปิด
ในเวลานี้คุณจะเห็นได้ว่ากระบวนการ dllhost.exe ถูกปิดแล้ว