ข้อความแสดงข้อผิดพลาด BUG: เมื่อคุณพยายามที่จะส่งต่อเป็นวัตถุชุดเก็บรวบรวมจากคอมโพเนนต์ Visual Basic 6.0 Visual Basic 2005 หรือ Visual Basic .NET: "System.InvalidCastException"

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 323737 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

อาการ

เมื่อคุณพยายามที่จะส่งต่อเป็นคอลเลกชันวัตถุจากคอมโพเนนต์ของ Microsoft Visual Basic 6.0 Microsoft Visual Basic 2005 หรือ.NET Visual Basic ของ Microsoft คุณอาจได้รับข้อความแสดงข้อผิดพลาด ใน Microsoft Visual Studio 2005 คุณได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:
ข้อยกเว้น unhandled ชนิด 'System.InvalidCastException' ที่เกิดขึ้นในapplicationname.exe
ข้อมูลเพิ่มเติม: ไม่สามารถเพี้ยนวัตถุของชนิด 'Microsoft.VisualBasic.Collection' พิมพ์ 'VBA.Collection'
ใน Microsoft Visual Studio .NET คุณได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:
ข้อยกเว้น unhandled ชนิด 'System.InvalidCastException' ที่เกิดขึ้นในapplicationname.exe
ข้อมูลเพิ่มเติม: เพี้ยนไม่ถูกต้องที่ระบุ
ถ้าคุณตรวจสอบชนิดของวัตถุเรียกเก็บเงินที่ Visual Basic 2005 หรือ Visual Basic .NET expects คุณพบว่า Visual Basic 2005 หรือ Visual Basic .NET expectsVBA.Collectionพิมพ์แทนMicrosoft.VisualBasic.Collectionประเภท: ถ้าคุณเปลี่ยนแปลงของคุณให้รหัสผ่านเป็นวัตถุคอลเลกชันของการVBA.Collectionชนิด คุณได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้บนบรรทัดของรหัสที่คุณพยายามที่จะสร้างอินสแตนซ์ใหม่ของการVBA.Collectionคลาส:
ข้อยกเว้น unhandled ชนิด 'System.Runtime.InteropServices.COMException' ที่เกิดขึ้นในapplicationname.exe
ข้อมูลเพิ่มเติม: วัตถุ COM กับ CLSID {A4C4671C-499F-101B-BB78-00AA00383CBB } จะไม่ถูกต้อง หรือไม่มีการลงทะเบียน
นอกจากนี้ปัญหานี้เกิดขึ้นใน Microsoft .NET Framework-สนับสนุนภาษาอื่น ๆ เช่น Microsoft Visual c# 2005 และเวอร์ชันก่อนหน้าของสนับสนุน.NET Framework Microsoft Visual c#

สาเหตุ

กระบวนการInvalidCastExceptionข้อผิดพลาดเกิดขึ้นเนื่องจากการMicrosoft.VisualBasic.Collectionชนิดไม่เข้ากันกับVBA.Collectionประเภท: กระบวนการCOMExceptionข้อผิดพลาดเกิดขึ้นเนื่องจากเฉพาะการแสดงผลพื้นฐาน 6.0 แอพพลิเคชันสามารถสร้างอินสแตนซ์ของการVBA.Collectionคลาสที่ คุณไม่สามารถสร้างอินสแตนซ์ของการVBA.Collectionคลานอกแอพลิเคชันของ Visual Basic 6.0

การหลีกเลี่ยงปัญหา

เมื่อต้องการแก้ไขปัญหานี้ สร้างเป็นVBA.Collectionวัตถุในแอพลิเคชันของ Visual Basic 6.0 และจากนั้น กลับวัตถุไปยังโปรแกรมประยุกต์ Visual Basic 2005 หรือ Visual Basic .NET เมื่อต้องการทำเช่นนี้ คุณสามารถสร้าง DLL 6.0 ของ Visual Basic ใหม่ หรือเพิ่มวิธีใหม่ใน DLL ที่มีอยู่

หมายเหตุ:ดัชนีของคอลเลกชันวัตถุ ใน Visual Basic 2005 หรือ ใน Visual Basic .NET คือ 1 พื้นฐาน อย่างไรก็ตาม ดัชนีของ Visual Basic 6.0 เป็น 0 พื้นฐาน ดังนั้น คุณอาจต้องการปรับเปลี่ยนการแสดงผลแบบพื้นฐาน 6.0 DLL ใช้ 1 พื้นฐานเป็นดัชนีสำหรับคอลเลกชันของคุณแทนการ 0 พื้นฐาน

สร้าง DLL 6.0 Visual Basic ที่คืนค่าคอลเลกชัน

  1. DLL ActiveX การ Microsoft 6.0 Visual Basic ในการสร้างโครงการ โดยค่าเริ่มต้น การClass1คลาสที่ถูกสร้างขึ้น
  2. เปลี่ยนชื่อโครงการ CollectionFactory แล้ว เปลี่ยนชื่อเป็นคลาสclsVBACollection.
  3. เพิ่มรหัสต่อไปนี้ไปclsVBACollectionคลาสที่
    ' This function creates a new object of the VBA collection.
    Public Function CreateVBACollection() As Collection
    
       ' Define a variable of type Collection.
       Dim col As Collection
    
       ' Create a Collection object.
       Set col = New Collection
    
       ' Return the Collection object.
       Set CreateVBACollection = col
    End Function
  4. ในการแฟ้ม:เมนู คลิกตรวจสอบ CollectionFactory.dll.
  5. เริ่ม Visual Studio 2005 หรือ Visual Studio .NET สร้างคอนโซลในแอพลิเคชันโครงการ โดยใช้ Visual Basic 2005 หรือ Visual Basic .NET โดยค่าเริ่มต้น แฟ้ม Module1.vb ถูกสร้างขึ้น
  6. คลิกขวาใน Explorer โซลูชันอ้างอิง:แล้ว คลิกเพิ่มการอ้างอิง.

    หมายเหตุ:ใน Visual Studio 2005 คลิกชื่อโครงการ และคลิกเพิ่มการอ้างอิง.
  7. ในการเพิ่มการอ้างอิงกล่องโต้ตอบ คลิกการcomแท็บ
  8. คลิกเรียกดูแล้ว ค้นหาCollectionFactory.dll. คลิกตกลง.

    หมายเหตุ:ใน Visual Studio 2005 คลิกCollectionFactory.dllแล้ว คลิกตกลง.
  9. แทนหลักการย่อยวิธีการ มีรหัสต่อไปนี้
       Sub Main()
          ' Create a new instance of the clsVBSCollection class.
          Dim objVBACollection As New CollectionFactory.clsVBACollectionClass()
    
          ' The following variable stores the collection object that the CollectionFactory DLL returns.
          Dim col As VBA.CollectionClass
    
          ' Get the VBA.Collection object.
          col = objVBACollection.CreateVBACollection()
    
          ' Use the collection as you typically would do so.
          col.Add("Microsoft")
       End Sub

สถานะ

Microsoft ยืนยันว่าจุดบกพร่องนี้เป็นสิ่งที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"

ข้อมูลเพิ่มเติม

ขั้นตอนในการทบทวนการเกิดปัญหา

  1. DLL ActiveX การ Microsoft 6.0 Visual Basic ในการสร้างโครงการ โดยค่าเริ่มต้น การClass1คลาสที่ถูกสร้างขึ้น
  2. เพิ่มรหัสต่อไปนี้ไปClass1คลาสที่
    Public Function GetCollection(col As Collection) As Variant
       GetCollection = col(1)
    End Function
  3. ในการProjectเมนู คลิกคุณสมบัติ. เปลี่ยนชื่อโครงการ TestCollection
  4. ในการแฟ้ม:เมนู คลิกตรวจสอบ TestCollection.dll.
  5. ใน Visual Studio 2005 หรือ ใน Visual Studio .NET แอพลิเคชันของคอนโซลสร้างโครงการ โดยใช้ Visual Basic 2005 หรือ Visual Basic .NET โดยค่าเริ่มต้น แฟ้ม Module1.vb ถูกสร้างขึ้น
  6. คลิกขวาใน Explorer โซลูชันอ้างอิง:แล้ว คลิกเพิ่มการอ้างอิง.

    หมายเหตุ:ใน Visual Studio 2005 คลิกชื่อโครงการ และคลิกเพิ่มการอ้างอิง.
  7. ในการเพิ่มการอ้างอิงกล่องโต้ตอบ คลิกการcomแท็บ
  8. คลิกเรียกดูแล้ว ค้นหาTestCollection.dll. คลิกตกลง.

    หมายเหตุ:ใน Visual Studio 2005 คลิกTestCollection.dllแล้ว คลิกตกลง.
  9. แทนหลักการย่อยวิธีการ มีรหัสต่อไปนี้
       Sub Main()
          ' Create a Microsoft.VisualBasic.Collection object.
          Dim col As New Collection()
          Dim objTestCol As New TestCollection.Class1Class()
          Dim objRetVal As Object
    
          ' Add an item to the collection.
          col.Add("Hello World")
    
          ' Pass the collection as a parameter.
          objRetVal = objTestCol.GetCollection(col)
       End Sub
    
  10. ในการตรวจแก้จุดบกพร่องเมนู คลิกเริ่มการทำงานเมื่อต้องการเรียกใช้โปรแกรมประยุกต์ คุณได้รับข้อความแสดงข้อผิดพลาดข้อความแรกที่กล่าวไว้ในส่วน "อาการ"
  11. คลิกดำเนินการต่อ.
  12. ค้นหาบรรทัดของรหัสต่อไปนี้
       Dim col As New Collection()
  13. แทนบรรทัดของรหัสที่คุณอยู่ในขั้นตอนที่ 12 ด้วยบรรทัดของรหัสต่อไปนี้
       Dim col As New VBA.CollectionClass()
  14. ในการตรวจแก้จุดบกพร่องเมนู คลิกเริ่มการทำงานเมื่อต้องการเรียกใช้โปรแกรมประยุกต์ คุณได้รับข้อความแสดงข้อผิดพลาดข้อความที่สองที่กล่าวไว้ในส่วน "อาการ"

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
316163ข้อผิดพลาดเมื่อคุณพยายามที่จะสร้างไลบรารีคลาสโครงการ ใน Visual Basic .NET หรือ Visual Basic 2005

คุณสมบัติ

หมายเลขบทความ (Article ID): 323737 - รีวิวครั้งสุดท้าย: 19 ตุลาคม 2553 - Revision: 2.0
ใช้กับ
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Keywords: 
kbvs2005swept kbvs2005applies kbvs2002sp1sweep kberrmsg kbmsg kbdll kbcollections kbcollectionclass kbinterop kbautomation kbappcompatibility kbbug kbmt KB323737 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:323737

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com