Visual Basic denetimleri de gerçekleştir ıobjectsafety nasıl

Makale çevirileri Makale çevirileri
Makale numarası: 182598 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Özet

Bu makalede, denetimlerini komut dizilerinde kullanmak ve başlatmak için güvenli olarak işaretlemek için Visual Basic denetimde ıobjectsafety arabirimini nasıl. Varsayılan olarak, Visual Basic denetimleri bileşen kategorisini kayıt defterindeki denetimin komut dizilerinde kullanmak ve başlatmak için güvenli olarak işaretlemek için kullanır. ıobjectsafety arabirimini uygulayan tercih edilen yöntemdir. Bu makalede, bu arabirim, Visual Basic denetimleri gerçekleştirmek için gereken tüm kodunu içerir.

Lütfen bir denetimi yalnızca, aslında güvenli ise, güvenli işaretlenmelidir olduğunu unutmayın. Bu makalede denetimlerini komut dizilerinde kullanmak ve başlatmak için güvenli olarak işaretleme ayrıntılarını tanımlayın; Bu, yalnızca kodda nasıl yapacağınızı göstermektedir. Bu ayrıntılı bir açıklaması için ınternet istemcisi Software Development Kit'e (SDK) belgelerine başvurun. "Güvenli başlatma ve komut dizileri için ActiveX denetimleri" Component Development bölümünde bakın.

Daha fazla bilgi

UYARı: Bu makalede açıklanan, bir veya daha fazlası aşağıdaki işlevleri: VarPtr, VarPtrArray, VarPtrStringArray, StrPtr ve ObjPtr. Bu işlevler, Microsoft Teknik destek tarafından desteklenmiyor. Visual Basic belgelerindeki belgelenmemiştir ve sağlanan bu Knowledge Base makalesinde "olduğu gibi." Microsoft, Visual Basic gelecekteki sürümlerde kullanılabilir olduğunu garanti etmez. Bu işlevler hakkında ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
199824Nasıl yapılır: adresini değişkenleri Visual Basic'te Al...
Aşağıdaki adımlar Basit bir Visual Basic denetimi oluşturma ve komut dizilerinde kullanmak ve başlatmak için güvenli işaretler nasıl gösterilmektedir.
  1. Bu örnekte, oluşturduğunuz tüm dosyaları kaydedebileceğiniz yeni bir klasör oluşturun.
  2. OLE Otomasyonu tür kitaplığı Oluşturucu, Visual Basic 6.0 CD-ROM'undan alın. Bunu yapmak için <a0></a0>, tüm dört dosya \Common\Tools\VB\Unsupprt\Typlib\ klasöründen proje klasörünüze kopyalayın. Not: VIsual Basic 5.0 \VB5.0\Tools\Unsupprt\Typlib\ klasöründeki tüm dosyaları kopyalamak.
  3. Aşağıdaki metni Not Defteri'ne kopyalayın ve dosyayı Objsafe.odl olarak <a1>Proje</a1> klasöründeki kaydedin:
          [
              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. Bir komut isteminde <path>CD'YI kullanın... komutunu proje klasöre gidin ve bir .tlb dosyası oluşturmak için aşağıdaki komutu yazın:
    MKTYPLIB objsafe.odl TLB objsafe.tlb
  5. Visual Basic, bir ActiveX denetimi) projesi oluşturun. Özellikler listesinde projenin IObjSafety ve DemoCtl için denetimin adını değiştirin. Denetimi cmdTest adlı bir KomutDüğmesi yerleştirin. The cmdTest Tıklat olay işleyicisinde bir MsgBox "Test" ifadesi yerleştirin.
  6. Proje menüsünde Başvurular, göz tıklatıp, daha önce oluşturduğunuz Objsafe.tlb ekleyin.
  7. Projenizi aşağıdaki kod yeni bir modül ekleyin ve modül basSafeCtl adı:
          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. Proje Özellikleri ', yukarıdaki Sub Main'nı çalıştırmak için Sub Main için başlangıç nesne değiştirin. M_fSafeForScripting ve m_fSafeForInitializing değişkenleri güvenli komut dosyası ve/veya başlatma değişkenler için değerleri belirtmek için kullanın.
  9. Denetimi <a1>Kod</a1> penceresini açın. (Hemen sonra Seçenek Belirtik veya ilk olarak) bildirisi bölümüne aşağıdaki kod satırını ekleyin:
    Implements IObjectSafety
    					
  10. Aşağıdaki iki yordam denetimleri kodunuzu Kopyala:
          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. Dosya menüsünde, proje ve dosyaları kaydedin. OCX bir proje dosyasından olun. Denetimi şimdi ıobjectsafety arabirimini uygular. Sınamak için <a0></a0>, .htm dosyasını denetimi ekleyin.

Referanslar

MkTypLib.exe önceden ile Platform Software Development Kit'e (Microsoft Visual Studio 6.0 ile gelen SDK) birlikte eski bir araçtır. Geçerli Platform SDK MkTypLib.exe aracı ile birlikte verilmez değil.

MkTypLib gerekti?inde hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesine bakın:
http://www.microsoft.com/msj/0297/visualprog/visualprog0297.aspx
Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
161873Işareti MFC denetimleri güvenli Scripting/başlatılması için nasıl
143258Tip kitaplığı'nda, sabitleri ve DLL bildirimleri oluşturma
131105Örnek: TYPEBLD: ICreateTypeLib ve ICreateTypeInfo nasıl kullanılır
ıobjectsafety arabirimi hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesine bakın:
http://msdn.microsoft.com/en-us/library/aa911729.aspx
Güvenli başlatma ve ActiveX denetimleri için komut dosyası oluşturma hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesine bakın:
http://msdn2.microsoft.com/en-us/library/Aa751977.aspx
Microsoft ınternet Explorer için Web tabanlı çözümler geliştirme hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitelerini ziyaret edin:
http://msdn.microsoft.com/ie/

http://support.microsoft.com/iep

Özellikler

Makale numarası: 182598 - Last Review: 16 Ekim 2007 Salı - Gözden geçirme: 5.3
Bu makaledeki bilginin uygulandığı durum:
  • 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 Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 4.01 Service Pack 1
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft Internet Explorer 5.0
  • Microsoft Internet Explorer 5.01
  • Microsoft Internet Explorer (Programming) 5.01 SP1
  • Microsoft Internet Explorer 5.5
Anahtar Kelimeler: 
kbmt kbfaq kbhowto KB182598 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:182598

Geri Bildirim Ver

 

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