BUG: Pesan galat ketika Anda mencoba untuk melewati sebuah koleksi objek dari Visual Basic 6.0 komponen Visual Basic 2005 atau Visual Basic.NET: "System.InvalidCastException"

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 323737 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

GEJALA

Ketika Anda mencoba untuk menyampaikan Koleksi objek dari Microsoft Visual Basic 6.0 komponen untuk Microsoft Visual Basic 2005 atau untuk Microsoft Visual Basic.NET, Anda mungkin menerima pesan galat. Microsoft Visual Studio 2005, Anda menerima pesan galat berikut:
Unhandled pengecualian tipe 'System.InvalidCastException' yang terjadi di ApplicationName.exe
Informasi tambahan: tidak dapat dilemparkan objek dari tipe 'Microsoft.VisualBasic.Collection' tipe ' VBA.Koleksi '.
Di Microsoft Visual Studio.NET, Anda menerima pesan galat berikut:
Unhandled pengecualian tipe 'System.InvalidCastException' terjadi di ApplicationName.exe
Informasi tambahan: ditentukan cast adalah tidak berlaku.
Jika Anda memeriksa jenis Koleksi objek yang Visual Basic 2005 atau Visual Basic.NET mengharapkan, Anda menemukan bahwa Visual Basic 2005 atau Visual Basic.NET mengharapkan VBA.Koleksi jenis bukan Microsoft.VisualBasic.Collection jenis. Jika Anda mengubah kode untuk lulus objek koleksi VBA.Koleksi jenis, Anda menerima pesan galat berikut pada baris kode di mana Anda mencoba untuk membuat contoh baru dari VBA.Koleksi kelas:
Unhandled pengecualian jenis 'System.Runtime.InteropServices.COMException' yang terjadi di ApplicationName.exe
Informasi tambahan: COM objek dengan CLSID {A4C4671C-499F-101B-BB78-00AA00383CBB} adalah atau tidak sah atau tidak terdaftar.
Masalah ini juga terjadi di Microsoft lainnya.NET Framework-didukung bahasa seperti Microsoft Visual C# 2005 dan versi sebelumnya.NET Framework-didukung Microsoft Visual C#.

PENYEBAB

The InvalidCastException kesalahan terjadi karena Microsoft.VisualBasic.Collection jenis tidak sesuai dengan VBA.Koleksi jenis. The COMException kesalahan terjadi karena Visual Basic 6.0 aplikasi dapat membuat sebuah instance dari VBA.Koleksi kelas. Anda tidak dapat membuat sebuah instance dari VBA.Koleksi kelas di luar aplikasi Visual Basic 6.0.

TEKNIK PEMECAHAN MASALAH

Untuk mengatasi masalah ini, membuat VBA.Koleksi objek dalam aplikasi Visual Basic 6.0, dan kemudian kembali objek Visual Basic 2005 atau Visual Basic.NET aplikasi. Untuk melakukan ini, Anda dapat menciptakan Visual baru Dasar 6.0 DLL atau menambahkan metode baru dalam DLL ada.

Catatan Indeks Koleksi objek dalam Visual Basic 2005 atau Visual Basic.NET adalah basis 1. Namun, indeks Visual Basic 6.0 adalah dasar 0. Oleh karena itu, Anda mungkin harus mengubah Visual Basic 6.0 DLL untuk menggunakan basis 1 sebagai indeks untuk koleksi bukan dasar 0.

Menciptakan Visual Basic 6.0 DLL yang mengembalikan koleksi

  1. Membuat DLL ActiveX Microsoft Visual Basic 6.0 proyek. Secara default, Class1 kelas dibuat.
  2. Mengubah nama proyek CollectionFactory, dan kemudian mengubah nama kelas clsVBACollection.
  3. Tambahkan kode berikut untuk clsVBACollection kelas.
    ' 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. Pada Berkas menu, klik Membuat CollectionFactory.dll.
  5. Mulai Visual Studio 2005 atau Visual Studio.NET. Membuat konsol Aplikasi proyek dengan menggunakan Visual Basic 2005 atau Visual Basic.NET. Secara default, berkas Module1.vb adalah dibuat.
  6. Dalam solusi Explorer, klik kananReferensi, lalu klik Tambahkan Referensi.

    Catatan Pada Visual Studio 2005, klik nama proyek, dan kemudian klik Menambahkan referensi.
  7. Dalam Menambahkan referensi kotak dialog, klikCOM tab.
  8. Klik People, dan kemudian cariCollectionFactory.dll. Klik Oke.

    Catatan Pada Visual Studio 2005, klik CollectionFactory.dll, lalu klik Oke.
  9. Menggantikan Sub utama metode dengan kode berikut.
       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

STATUS

Microsoft telah mengkonfirmasi bahwa ini adalah bug dalam produk Microsoft sebagaimana didaftar di dalam bagian "Berlaku untuk".

INFORMASI LEBIH LANJUT

Langkah-langkah untuk menyalin masalah

  1. Membuat DLL ActiveX Microsoft Visual Basic 6.0 proyek. Secara default, Class1 kelas dibuat.
  2. Tambahkan kode berikut untuk Class1 kelas.
    Public Function GetCollection(col As Collection) As Variant
       GetCollection = col(1)
    End Function
  3. Pada Project menu, klikProperti. Mengubah nama proyek TestCollection.
  4. Pada Berkas menu, klik Membuat TestCollection.dll.
  5. Dalam Visual Studio 2005 atau dalam Visual Studio.NET, membuat aplikasi konsol proyek dengan menggunakan Visual Basic 2005 atau Visual Basic.NET. Secara default, berkas Module1.vb adalah dibuat.
  6. Dalam solusi Explorer, klik kananReferensi, lalu klik Tambahkan Referensi.

    Catatan Pada Visual Studio 2005, klik nama proyek, dan kemudian klik Menambahkan referensi.
  7. Dalam Menambahkan referensi kotak dialog, klikCOM tab.
  8. Klik People, dan kemudian cariTestCollection.dll. Klik Oke.

    Catatan Pada Visual Studio 2005, klik TestCollection.dll, lalu klik Oke.
  9. Menggantikan Sub utama metode dengan kode berikut.
       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. Pada Debug menu, klikMulai untuk menjalankan aplikasi. Anda menerima galat pertama pesan yang disebutkan di bagian "Gejala".
  11. KlikLanjutkan.
  12. Cari baris kode berikut.
       Dim col As New Collection()
  13. Menggantikan baris kode yang Anda terletak di langkah 12 dengan baris kode berikut.
       Dim col As New VBA.CollectionClass()
  14. Pada Debug menu, klikMulai untuk menjalankan aplikasi. Anda menerima galat kedua pesan yang disebutkan di bagian "Gejala".

REFERENSI

Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
316163Pesan galat ketika Anda mencoba untuk membangun proyek perpustakaan kelas dalam Visual Basic.BERSIH atau pada Visual Basic 2005

Properti

ID Artikel: 323737 - Kajian Terakhir: 26 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Kata kunci: 
kbvs2005swept kbvs2005applies kbvs2002sp1sweep kberrmsg kbmsg kbdll kbcollections kbcollectionclass kbinterop kbautomation kbappcompatibility kbbug kbmt KB323737 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:323737

Berikan Masukan

 

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