บัก: "วัตถุตัวแปร หรือ ด้วยตัวแปรของบล็อกไม่ได้ตั้งค่า" ข้อผิดพลาดเมื่อคุณเข้าถึงตัวแปรวัตถุสาธารณะ

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

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

อาการ

เมื่อคุณตั้งค่าตัวแปรสาธารณะวัตถุของคอมโพเนนต์ของรูปแบบวัตถุคอมโพเนนต์ของ Microsoft (COM) ใน Microsoft Visual Basic .NET หรือ ใน Microsoft Visual Basic 2005 คุณอาจได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:
มีข้อยกเว้นของชนิด 'System.Runtime.InteropServices.COMException' ไม่สามารถจัดการได้เกิดขึ้นใน microsoft.visualbasic.dll

ข้อมูลเพิ่มเติม: วัตถุตัวแปร หรือ ด้วยตัวแปรของบล็อกไม่ได้ตั้งค่า

สาเหตุ

ลักษณะการทำงานนี้อาจเกิดขึ้นหากมีเงื่อนไขต่อไปนี้ทั้งหมด:
  • คุณสามารถกำหนดตัวแปรสาธารณะในการ COMcomponent
  • ตัวแปรของชนิดออบเจ็กต์อยู่
  • คุณอ้างถึงคอมโพเนนต์ COM นี้ โดยใช้.NET พื้นฐาน inVisual การผูกล่าช้า หรือ ใน Visual Basic 2005
เมื่อคุณเข้าถึงวัตถุสาธารณะ โดยใช้การผูกข้อมูลล่าช้า Visual Basic .NET หรือ Visual Basic 2005 อย่างถูกต้องตั้งค่าการแจงนับBindingFlags

การแจงนับBindingFlagsถูกใช้เพื่อระบุสถานะที่ผูกตัวควบคุมและวิธีการที่การค้นหาสำหรับสมาชิกและชนิดการผลิต โดยการสะท้อน

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

เมื่อต้องการหลีกเลี่ยงปัญหานี้ ใช้หนึ่งในวิธีต่อไปนี้

ใช้การรวมก่อนหน้า ใน Visual Basic .NET หรือ Visual Basic 2005

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

เมื่อคุณใช้ Visual Basic .NET หรือ Visual Basic 2005 รหัสตัวอย่างที่อยู่ในส่วน "ขั้นตอนในการทบทวนเกิดปัญหา" ใช้ตัวอย่างรหัสต่อไปนี้เพื่อกำหนดตัวแปรวัตถุ
Dim obj1 As Project1.Class1
Set obj1 = New Project1.Class1
อย่าใช้ตัวอย่างรหัสต่อไปนี้:
Dim obj1 As Object
Set obj1 = New Project1.Class1

กำหนดคุณสมบัติสาธารณะกระบวนงานในคอมโพเนนต์ COM

ปรับเปลี่ยนคอมโพเนนต์ COM 6.0 Visual Basic ของ Microsoft เมื่อต้องการใช้คุณสมบัติสาธารณะกระบวนงาน การตั้งค่า และส่งกลับวัตถุ ทำเช่นนี้แทนการใช้ตัวแปรวัตถุส่วนกลาง โซลูชันนี้จะยากต่อการนำไปใช้ได้เนื่องจากคุณต้องปรับเปลี่ยนคอมโพเนนต์ Visual Basic 6.0 เดิม ถ้าคุณทำเช่นนี้ คุณอาจต้องตัดความเข้ากันได้แบบไบนารีของคอมโพเนนต์

เมื่อคุณใช้ตัวอย่างรหัส Visual Basic 6.0 ที่อยู่ในส่วน "ขั้นตอนในการทบทวนเกิดปัญหา" ใช้ตัวอย่างรหัสต่อไปนี้เพื่อกำหนดคุณสมบัติสาธารณะกระบวนงานภายในตัวคลาClass1เพื่อตั้งค่า และเรียกใช้ตัวแปรวัตถุ
Option Explicit

Private obj1 As Object

Public Property Get Obj() As Object
    Set Obj = obj1
End Property

Public Property Let Obj(Object As Object)
    Set obj1 = Object
End Property

สถานะ

Microsoft ยืนยันว่า นี่คือจุดบกพร่องในผลิตภัณฑ์ของ Microsoft ซึ่งแสดงไว้ในส่วน "ใช้กับ"

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

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

สร้างโครงการที่มี ActiveX DLL ใน Visual Basic 6.0

  1. เริ่ม Visual Basic 6.0
  2. สร้างโครงการ ActiveX DLL ใหม่

    โดยค่าเริ่มต้น Class1 จะถูกสร้างขึ้น
  3. พิมพ์รหัสต่อไปนี้: sectionof ประกาศทั่วไปในโมดูล
    Public obj As Object		
  4. โครงการนี้เป็น Project1.dll ที่รวบรวม

สร้างโปรแกรมประยุกต์ Visual Basic .NET หรือ Visual Basic 2005

  1. รีสตาร์ท Microsoft Visual Studio .NET, Microsoft Visual Studio 2005 หรือ Microsoft Visual Basic 2005 Express Edition ...
  2. สร้าง consoleapplication ใหม่ Visual Basic .NET หรือ Visual Basic 2005

    โดยค่าเริ่มต้น Module1.vb ถูกสร้างขึ้น
  3. บนเมนูโครงการคลิกAddReference
  4. คลิกแท็บCOM
  5. คลิกProject1ในรายการของการอ้างอิง availableCOM และจากนั้น คลิกเลือก ถ้าคุณไม่เห็นรายการProject1คลิกเรียกดูและ thenlocate Project1.dll บนฮาร์ดดิสก์ของคอมพิวเตอร์

    หมายเหตุ ใน Visual Studio 2005 หรือ Visual Basic 2005 Express เวอร์ชั่น คุณไม่จำเป็นต้องคลิกเลือก
  6. คลิกตกลงเพื่อปิดกล่องโต้ตอบAddReference
  7. แทนรหัสเริ่มต้นใน Module1.vb ตัวอย่าง followingcode:
    Module Module1
         Sub Main()
            Dim obj1 As Object
            Console.WriteLine("Instantiating Project.Class1.")
            obj1 = New Project1.Class1
            Console.WriteLine("Object instantiated.")
            obj1.obj = Nothing   'This line causes the error.
            Console.WriteLine("obj member set to Nothing.")
            Console.WriteLine("Press ENTER to exit.")
            Console.Read()
        End Sub
    End Module
    					
  8. เรียกใช้โครงการ

    คุณได้รับข้อผิดพลาดกล่าวถึงในส่วน "อาการ" messagethat

คุณสมบัติ

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

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

 

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