Bagaimana menerapkan IObjectSafety di kontrol Visual Basic

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

RINGKASAN

Artikel ini menjelaskan bagaimana menerapkan IObjectSafety antarmuka di kontrol Visual Basic untuk menandai kontrol aman untuk skrip dan inisialisasi. Secara default, kontrol Visual Basic menggunakan komponen Kategori entri dalam registri untuk menandai kontrol aman untuk skrip dan inisialisasi. Menerapkan IObjectSafety antarmuka adalah metode yang disukai. Artikel ini berisi semua kode yang diperlukan untuk menerapkan antarmuka ini dalam kontrol Visual Basic.

Harap diingat bahwa kontrol hanya akan ditandai sebagai aman jika, pada kenyataannya, aman. Artikel ini tidak menggambarkan rincian menandai kontrol sebagai aman untuk scripting dan inisialisasi; ini hanya menunjukkan bagaimana melakukannya dalam kode. Lihat dokumentasi Internet klien Software Development Kit (SDK) untuk penjelasan rinci tentang ini. Lihat "Aman inisialisasi dan Scripting untuk kontrol ActiveX" di bawah bagian pengembangan komponen.

INFORMASI LEBIH LANJUT

PERINGATAN: Satu atau lebih dari fungsi-fungsi berikut yang dibahas dalam artikel ini: VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, dan ObjPtr. Fungsi-fungsi ini tidak didukung oleh Microsoft dukungan teknis. Mereka tidak didokumentasikan dalam dokumentasi Visual Basic dan disediakan dalam artikel Basis Pengetahuan ini "sebagaimana"adanya. Microsoft tidak menjamin bahwa mereka akan tersedia di masa depan pers Visual Basic. Untuk informasi tambahan tentang fungsi-fungsi ini, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
199824 Bagaimana untuk mendapatkan alamat variabel dalam Visual Basic
Langkah-langkah berikut menggambarkan cara membuat kontrol Visual Basic sederhana dan menandai aman untuk scripting dan inisialisasi.
  1. Buat folder baru di mana Anda dapat menyimpan semua berkas yang Anda buat dalam contoh ini.
  2. Mendapatkan Generator OLE perpustakaan jenis otomatisasi dari Visual Basic 6.0 CD-ROM. Untuk melakukannya, menyalin semua empat file dari \Common\Tools\VB\Unsupprt\Typlib\ folder ke folder proyek Anda. Catatan: Menyalin semua file dari folder \VB5.0\Tools\Unsupprt\Typlib\ dalam VIsual Basic 5.0.
  3. Menyalin teks berikut ke dalam Notepad, dan menyimpan file dalam folder proyek sebagai 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. Pada prompt perintah, menggunakan CD<path></path> perintah untuk pindah ke folder proyek, dan ketik perintah berikut untuk menghasilkan berkas .tlb:
    MKTYPLIB objsafe.odl /tlb objsafe.tlb
  5. Dari Visual Basic, membuat proyek kontrol ActiveX. Dalam Properti Daftar, mengubah nama proyek IObjSafety dan nama kontrol untuk DemoCtl. Menempatkan CommandButton bernama cmdTest pada kontrol. Dalam acara klik handler cmdTest, meletakkan MsgBox "Test" pernyataan.
  6. Pada Project menu, klik Referensi, browse ke dan menambahkan Objsafe.tlb, yang Anda buat sebelumnya.
  7. Menambahkan modul baru untuk proyek Anda dengan kode berikut, dan nama basSafeCtl modul:
          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. Dari properti proyek, mengubah objek Startup Sub utama untuk mengeksekusi Sub utama di atas. Penggunaan m_fSafeForScripting dan m_fSafeForInitializing variabel untuk menentukan nilai-nilai aman untuk dan/script atau Inisialisasi variabel.
  9. Buka jendela kode kontrol Anda. Menambahkan baris kode berikut ke bagian Deklarasi (setelah pilihan eksplisit atau sebagai yang pertama):
    Implements IObjectSafety
    					
  10. Salin prosedur dua berikut kode kontrol:
          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. Pada Berkas menu, menyimpan proyek dan file Anda. Membuat file OCX dari proyek Anda. Kendali Anda sekarang menerapkan IObjectSafety antarmuka. Untuk menguji itu, memasukkan kontrol di berkas .htm.

REFERENSI

MkTypLib.exe adalah alat tua yang sebelumnya dikirim dengan Platform Software Development Kit (SDK) yang datang dengan Microsoft Visual Studio 6.0. Saat ini Platform SDK tidak datang dengan alat MkTypLib.exe.

Untuk informasi tentang cara untuk memohon MkTypLib, lihat Website Microsoft berikut:
http://www.Microsoft.com/msj/0297/visualprog/visualprog0297.aspx
Untuk informasi tambahan, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
161873 Bagaimana kontrol Mark MFC aman untuk script/inisialisasi
143258 Cara membuat konstanta dan Deklarasi DLL di perpustakaan jenis
131105 CONTOH: TYPEBLD: bagaimana menggunakan ICreateTypeLib dan ICreateTypeInfo
Untuk informasi lebih lanjut tentang IObjectSafety antarmuka, lihat Website Microsoft berikut:
http://MSDN.Microsoft.com/en-us/library/aa911729.aspx
Untuk informasi lebih lanjut tentang initialization aman dan scripting untuk kontrol ActiveX, lihat Website Microsoft berikut:
http://msdn2.Microsoft.com/en-us/library/Aa751977.aspx
Untuk informasi lebih lanjut tentang mengembangkan solusi berbasis Web untuk Microsoft Internet Explorer, kunjungi Website Microsoft berikut:
http://MSDN.Microsoft.com/IE/

http://support.microsoft.com/iep

Properti

ID Artikel: 182598 - Kajian Terakhir: 16 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Visual Basic 5.0 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
Kata kunci: 
kbfaq kbhowto kbmt KB182598 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:182598

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