วิธีการ IObjectSafety ปฏิบัติในการควบคุม Visual Basic

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

สรุป

บทความนี้อธิบายวิธีการปฏิบัติการIObjectSafetyอินเทอร์เฟซในตัวควบคุม Visual Basic เพื่อทำเครื่องหมายตัวควบคุมที่ปลอดภัยสำหรับการเขียนสคริปต์และการเตรียมใช้งาน โดยค่าเริ่มต้น ตัวควบคุม Visual Basic ใช้คอมโพเนนต์ประเภทรายการในรีจิสทรีเพื่อทำเครื่องหมายตัวควบคุมที่ปลอดภัยสำหรับการเขียนสคริปต์และการเตรียมใช้งาน การใช้การIObjectSafetyอินเทอร์เฟซคือ วิธีการที่ต้องการ บทความนี้ประกอบด้วยรหัสจำเป็นต้องใช้อินเทอร์เฟซนี้ใน Visual Basic ควบคุมทั้งหมด

กรุณาให้จำไว้ว่า ตัวควบคุมควรเท่านั้นสามารถทำเครื่องหมายว่าปลอดภัยหากคุณมี ใน fact ความปลอดภัย บทความนี้ไม่ได้อธิบายรายละเอียดของการทำเครื่องหมายตัวควบคุมเป็นข้อความปลอดภัยสำหรับการเขียนสคริปต์และการเตรียมใช้งาน แสดงวิธีการที่ทำในรหัสเพียงแค่ โปรดดูเอกสารประกอบของอินเทอร์เน็ตไคลเอ็นต์ซอฟต์แวร์พัฒนา Kit (SDK) สำหรับคำอธิบายโดยละเอียดนี้ เห็น "เซฟการเตรียมใช้งานและการเขียนสคริปต์สำหรับ ActiveX ควบคุม" ภายใต้ส่วนของส่วนประกอบของการพัฒนา

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

คำเตือน: หนึ่งหรือมากกว่าฟังก์ชันต่อไปนี้จะกล่าวถึงในบทความนี้: VarPtrStringArray VarPtr, VarPtrArray StrPtr และ ObjPtr ฟังก์ชันเหล่านี้ไม่ได้รับการสนับสนุน โดยฝ่ายสนับสนุนด้านเทคนิคของ Microsoft จะได้รับการบันทึกจะไม่ไว้ในเอกสารประกอบของ Visual Basic และให้ไว้ในบทความในฐานความรู้นี้ "ตามที่เป็นอยู่" Microsoft ไม่รับประกันว่า พวกเขาจะใช้ได้ในรุ่นในอนาคตของ Visual Basicสำหรับข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชันเหล่านี้ ให้คลิกหมายเลขบทความด้านล่างนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
199824วิธีการรับที่อยู่ของตัวแปรใน Visual Basic
ขั้นตอนต่อไปนี้แสดงให้เห็นถึงวิธีการสร้างตัวควบคุม Visual Basic อย่างง่าย และทำเครื่องหมายปลอดภัยสำหรับการเขียนสคริปต์และการเตรียมใช้งาน
  1. สร้างโฟลเดอร์ใหม่ที่คุณสามารถบันทึกแฟ้มทั้งหมดที่คุณสร้างในตัวอย่างนี้
  2. รับตัวสร้างของไลบรารีชนิดของการทำงานอัตโนมัติของ OLE จากซีดีรอม Visual Basic 6.0 เมื่อต้องการทำเช่นนี้ สำเนาไฟล์ต่าง ๆ ทั้งสี่ที่ทั้งหมดจากโฟลเดอร์ \Common\Tools\VB\Unsupprt\Typlib\ ไปยังโฟลเดอร์โครงการของคุณหมายเหตุ:: คัดลอกแฟ้มทั้งหมดจากโฟลเดอร์ \VB5.0\Tools\Unsupprt\Typlib\ ใน VIsual Basic 5.0
  3. การคัดลอกข้อความต่อไปนี้ลงในแผ่นจดบันทึก และบันทึกแฟ้มในโฟลเดอร์โครงการเป็น Objsafe.odl:
          [
              uuid(C67830E0-D11D-11cf-BD80-00AA00575603),
              helpstring("VB IObjectSafety Interface"),
              version(1.0)
          ]
          library IObjectSafetyTLB
          {
              importlib("stdole2.tlb");
              [
                  uuid(CB5BDC81-93C1-11cf-8F20-00805F2CD064),
                  helpstring("IObjectSafety Interface"),
                  odl
              ]
              interface IObjectSafety:IUnknown {
                  [helpstring("GetInterfaceSafetyOptions")]
                  HRESULT GetInterfaceSafetyOptions(
                            [in]  long  riid,
                            [in]  long *pdwSupportedOptions,
                            [in]  long *pdwEnabledOptions);
    
                  [helpstring("SetInterfaceSafetyOptions")]
                  HRESULT SetInterfaceSafetyOptions(
                            [in]  long  riid,
                            [in]  long  dwOptionsSetMask,
                            [in]  long  dwEnabledOptions);
               }
           }
    					
  4. หน้าจอพร้อมรับคำสั่ง ใช้ซีดี<path></path>คำสั่งการย้ายไปยังโฟลเดอร์โครงการ และพิมพ์คำสั่งต่อไปนี้เพื่อสร้างแฟ้ม.tlb:
    MKTYPLIB objsafe.odl /tlb objsafe.tlb
  5. จาก Visual Basic สร้างโครงการมีตัวควบคุม activex ในการคุณสมบัติรายการ เปลี่ยนชื่อของโครงการไปIObjSafetyและชื่อของตัวควบคุมDemoCtl. ย้าย CommandButton ที่ชื่อว่า cmdTest บนตัวควบคุม ในการจัดการเหตุการณ์คลิของ cmdTest ย้ายงบ"ทดสอบ" MsgBox การ
  6. ในการProjectเมนู คลิกอ้างอิง:เรียกดู และเพิ่ม Objsafe.tlb ซึ่งคุณสร้างไว้ก่อนหน้านี้
  7. เพิ่มโมดูลใหม่ด้วยรหัสต่อไปนี้ในโครงการของคุณ และกำหนดชื่อ basSafeCtl โมดูล:
          Option Explicit
    
          Public Const IID_IDispatch = "{00020400-0000-0000-C000-000000000046}"
          Public Const IID_IPersistStorage = _
            "{0000010A-0000-0000-C000-000000000046}"
          Public Const IID_IPersistStream = _
            "{00000109-0000-0000-C000-000000000046}"
          Public Const IID_IPersistPropertyBag = _
            "{37D84F60-42CB-11CE-8135-00AA004BB851}"
    
          Public Const INTERFACESAFE_FOR_UNTRUSTED_CALLER = &H1
          Public Const INTERFACESAFE_FOR_UNTRUSTED_DATA = &H2
          Public Const E_NOINTERFACE = &H80004002
          Public Const E_FAIL = &H80004005
          Public Const MAX_GUIDLEN = 40
    
          Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
             (pDest As Any, pSource As Any, ByVal ByteLen As Long)
          Public Declare Function StringFromGUID2 Lib "ole32.dll" (rguid As _
             Any, ByVal lpstrClsId As Long, ByVal cbMax As Integer) As Long
    
          Public Type udtGUID
              Data1 As Long
              Data2 As Integer
              Data3 As Integer
              Data4(7) As Byte
          End Type
    
          Public m_fSafeForScripting As Boolean
          Public m_fSafeForInitializing As Boolean
    
          Sub Main()
              m_fSafeForScripting = True
              m_fSafeForInitializing = True
          End Sub
    					
  8. จากคุณสมบัติของโครงการ เปลี่ยนแปลงวัตถุเริ่มต้นไปหลักการย่อยการดำเนินการหลักย่อยข้างต้น ใช้แบบm_fSafeForScriptingและm_fSafeForInitializingตัวแปรเพื่อระบุค่าของข้อความปลอดภัยสำหรับตัวแปรและ/สคริปต์หรือเตรียมใช้งาน
  9. เปิดหน้าต่างรหัสของตัวควบคุมของคุณ เพิ่มบรรทัดต่อไปนี้ของรหัสไปส่วนการประกาศ (ไปทางขวา หลังตัวเลือกที่ชัดเจน หรือ เป็นครั้งแรก):
    Implements IObjectSafety
    					
  10. คัดลอกวิธีการสองที่ต่อไปนี้ไปยังรหัสควบคุมของคุณ:
          Private Sub IObjectSafety_GetInterfaceSafetyOptions(ByVal riid As _
          Long, pdwSupportedOptions As Long, pdwEnabledOptions As Long)
    
              Dim Rc      As Long
              Dim rClsId  As udtGUID
              Dim IID     As String
              Dim bIID()  As Byte
    
              pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER Or _
                                    INTERFACESAFE_FOR_UNTRUSTED_DATA
    
              If (riid <> 0) Then
                  CopyMemory rClsId, ByVal riid, Len(rClsId)
    
                  bIID = String$(MAX_GUIDLEN, 0)
                  Rc = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN)
                  Rc = InStr(1, bIID, vbNullChar) - 1
                  IID = Left$(UCase(bIID), Rc)
    
                  Select Case IID
                      Case IID_IDispatch
                          pdwEnabledOptions = IIf(m_fSafeForScripting, _
                        INTERFACESAFE_FOR_UNTRUSTED_CALLER, 0)
                          Exit Sub
                      Case IID_IPersistStorage, IID_IPersistStream, _
                         IID_IPersistPropertyBag
                          pdwEnabledOptions = IIf(m_fSafeForInitializing, _
                        INTERFACESAFE_FOR_UNTRUSTED_DATA, 0)
                          Exit Sub
                      Case Else
                          Err.Raise E_NOINTERFACE
                          Exit Sub
                  End Select
              End If
          End Sub
    
          Private Sub IObjectSafety_SetInterfaceSafetyOptions(ByVal riid As _
          Long, ByVal dwOptionsSetMask As Long, ByVal dwEnabledOptions As Long)
              Dim Rc          As Long
              Dim rClsId      As udtGUID
              Dim IID         As String
              Dim bIID()      As Byte
    
              If (riid <> 0) Then
                  CopyMemory rClsId, ByVal riid, Len(rClsId)
    
                  bIID = String$(MAX_GUIDLEN, 0)
                  Rc = StringFromGUID2(rClsId, VarPtr(bIID(0)), MAX_GUIDLEN)
                  Rc = InStr(1, bIID, vbNullChar) - 1
                  IID = Left$(UCase(bIID), Rc)
    
                  Select Case IID
                      Case IID_IDispatch
                          If ((dwEnabledOptions And dwOptionsSetMask) <> _
                       INTERFACESAFE_FOR_UNTRUSTED_CALLER) Then
                              Err.Raise E_FAIL
                              Exit Sub
                          Else
                              If Not m_fSafeForScripting Then
                                  Err.Raise E_FAIL
                              End If
                              Exit Sub
                          End If
    
                      Case IID_IPersistStorage, IID_IPersistStream, _
                    IID_IPersistPropertyBag
                          If ((dwEnabledOptions And dwOptionsSetMask) <> _
                        INTERFACESAFE_FOR_UNTRUSTED_DATA) Then
                              Err.Raise E_FAIL
                              Exit Sub
                          Else
                              If Not m_fSafeForInitializing Then
                                  Err.Raise E_FAIL
                              End If
                              Exit Sub
                          End If
    
                      Case Else
                          Err.Raise E_NOINTERFACE
                          Exit Sub
                  End Select
              End If
          End Sub
    					
  11. ในการแฟ้ม:เมนู การบันทึกโครงการและแฟ้มของคุณ ทำให้แฟ้มมี OCX จากโครงการของคุณ ตัวควบคุมของคุณใช้ในขณะนี้การIObjectSafetyอินเทอร์เฟซ เมื่อต้องการทดสอบ แทรกตัวควบคุมในแฟ้ม.htm

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

MkTypLib.exe เป็นเครื่องมือเก่าที่มีการแพลตฟอร์มที่ซอฟต์แวร์พัฒนา Kit (SDK) ที่มาพร้อมกับ Microsoft Visual Studio 6.0 ที่จัดส่งไปก่อนหน้านี้ ปัจจุบัน Platform SDK ไม่มา ด้วยเครื่องมือ MkTypLib.exe

สำหรับข้อมูลเกี่ยวกับวิธีการเรียก MkTypLib ดูเว็บไซต์ต่อไปนี้ของ Microsoft:
http://www.microsoft.com/msj/0297/visualprog/visualprog0297.aspx
สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความด้านล่างนี้ เพื่อดูบทความใน Microsoft Knowledge Base::
161873วิธีการเซฟควบคุม MFC ทำเครื่องหมายสำหรับการเตรียมการใช้งาน/การเขียนสคริปต์
143258วิธีการสร้างค่าคงที่และ Declarations DLL ในไลบรารีของชนิด
131105ตัวอย่าง: TYPEBLD: วิธีการที่ใช้ ICreateTypeLib และ ICreateTypeInfo
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการIObjectSafetyอินเทอร์เฟซ ดูเว็บไซต์ต่อไปนี้ของ Microsoft:
http://msdn.microsoft.com/en-us/library/aa911729.aspx
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเริ่มต้นที่ปลอดภัยและการเขียนสคริปต์สำหรับตัวควบคุม activex ดูเว็บไซต์ต่อไปนี้ของ Microsoft:
http://msdn2.microsoft.com/en-us/library/Aa751977.aspx
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการพัฒนาเว็บโดยใช้วิธีแก้ไขปัญหาสำหรับ Microsoft Internet Explorer แวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft:
http://msdn.microsoft.com/ie/

http://support.microsoft.com/iep

คุณสมบัติ

หมายเลขบทความ (Article ID): 182598 - รีวิวครั้งสุดท้าย: 7 มกราคม 2554 - Revision: 2.0
ใช้กับ
  • Microsoft Visual Basic Control Creation Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Internet Explorer 4.01 Service Pack 1
Keywords: 
kbFAQ kbhowto kbmt KB182598 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:182598

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

 

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