So wird 's gemacht: Implementieren IObjectSafety in Visual Basic-Steuerelementen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 182598 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Zusammenfassung

Dieser Artikel beschreibt, wie in Visual Basic-Steuerelemente sicher für Skripting und Initialisierung kennzeichnen die Steuerelemente die IObjectSafety-Schnittstelle implementiert. Standardmäßig verwenden Visual Basic-Steuerelemente Komponenteneinträge Kategorie in der Registrierung verwendet, um das Steuerelement sicher für Skripting und Initialisierung zu markieren. Implementieren die IObjectSafety-Schnittstelle ist die bevorzugte Methode. Dieser Artikel enthält den Code, der erforderlich ist, um diese Schnittstelle in Visual Basic-Steuerelemente implementieren.

Bitte Bedenken Sie, dass ein Steuerelement nur soll als sicher gekennzeichnet werden, wenn es, in der Tat sicher ist. Dieser Artikel beschreibt die Details der Markieren von Steuerelementen als sicher für Skripting und Initialisierung nicht; es wird einfach veranschaulicht, wie es im Code führen. Finden Sie in der Dokumentation Internet Client Software Development Kit (SDK) für eine detaillierte Beschreibung dazu. Finden Sie unter "Sichere Initialisierung und Scripting für ActiveX-Steuerelemente" unter dem Abschnitt "Component Development.

Weitere Informationen

Warnung: mindestens eine der folgenden Funktionen werden in diesem Artikel behandelt: VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, und ObjPtr. Diese Funktionen werden vom technischen Support von Microsoft nicht unterstützt. Sie sind nicht in der Visual Basic-Dokumentation behandelt und stehen zur Verfügung, in diesem Knowledge Base-Artikel "wie"besehen." Microsoft garantiert nicht, dass Sie in zukünftigen Versionen von Visual Basic verfügbar sind. Weitere Informationen zu diesen Funktionen finden Sie im Artikel der Microsoft Knowledge Base:
199824Gewusst wie: Abrufen die Adresse der Variablen in Visual Basic
Die folgenden Schritte veranschaulichen das Erstellen eines einfachen Visual Basic-Steuerelements und sicher für Skripting und Initialisierung zu markieren.
  1. Erstellen Sie einen neuen Ordner, in dem Sie alle Dateien speichern können, die Sie in diesem Beispiel erstellen.
  2. Rufen Sie den OLE-Automatisierung Type Library-Generator von der Visual Basic 6.0-CD-ROM. Dazu kopieren Sie alle vier Dateien aus dem Ordner \Common\Tools\VB\Unsupprt\Typlib\ in den Projektordner. Hinweis: alle Dateien vom Ordner in VIsual Basic 5.0 \VB5.0\Tools\Unsupprt\Typlib\ kopieren.
  3. Kopieren Sie den folgenden Text in den Editor, und speichern Sie die Datei im Projektordner als 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. Verwenden Sie an einer Eingabeaufforderung die <path>-CD <pfad> Befehl zum Wechseln in den Projektordner, und geben den folgenden Befehl ein, um eine TLB-Datei zu generieren:
    MKTYPLIB objsafe.odl/tlb objsafe.tlb
  5. Erstellen Sie in Visual Basic einem ActiveX-Steuerelementprojekt. Ändern Sie in der Liste Eigenschaften den Namen des Projekts zur IObjSafety und den Namen des Steuerelements, um DemoCtl. Fügen Sie eine Befehlsschaltfläche (CommandButton) mit der CmdTest des Steuerelements. Platzieren Sie in der Click-Ereignishandler die CmdTest eine "Testen" MsgBox-Anweisung.
  6. Im Menü Projekt klicken Sie auf Verweise, wechseln Sie zu, und fügen Sie Objsafe.tlb, die Sie zuvor erstellt haben.
  7. Das Projekt mit den folgenden Code ein neues Modul hinzu, und nennen Sie das Modul 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. Ändern Sie the Startup Object unter Projekteigenschaften auf Sub Main, um die Sub Main oben ausführen. Verwenden Sie die Variablen M_fSafeForScripting und M_fSafeForInitializing, um die Werte der sicher für Skripting und/oder Initialisierung-Variablen angegeben.
  9. Öffnen Sie das Codefenster des Steuerelements. Fügen Sie die folgende Codezeile in den Deklarationsbereich (direkt nach der Option Explicit oder wie der erste):
    Implements IObjectSafety
    					
  10. Kopieren Sie die folgenden zwei Prozeduren zum Code-Steuerelemente:
          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. Das Projekt und die Dateien im Menü Datei zu speichern. Stellen Sie eine OCX-Datei aus Ihrem Projekt. Das Steuerelement wird jetzt die IObjectSafety-Schnittstelle implementiert. Fügen Sie das Steuerelement in einer HTM-Datei, um es zu testen.

Informationsquellen

MkTypLib.exe ist eine alte Tool, das zuvor mit Platform Software Development Kit (SDK) geliefert, die im Lieferumfang von Microsoft Visual Studio 6.0 enthalten ist. Die aktuelle Plattform-SDK wird nicht mit dem Tool MkTypLib.exe geschaltet.

Informationen dazu, wie MkTypLib aufrufen können finden Sie unter der folgenden Microsoft-Website:
http://www.microsoft.com/msj/0297/visualprog/visualprog0297.aspx
Weitere Informationen finden Sie in folgenden Artikeln der Microsoft Knowledge Base:
161873So wird 's gemacht: Mark MFC-Steuerelementen sicher für Scripting/Initialisierung
143258Erstellen von Konstanten und DLL-Deklarationen in einer Typbibliothek
131105Beispiel: TYPEBLD: Verwendung von ICreateTypeLib und ICreateTypeInfo
Weitere Informationen über die IObjectSafety-Schnittstelle finden Sie unter der folgenden Microsoft-Website:
http://msdn.microsoft.com/en-us/library/aa911729.aspx
Weitere Informationen zum abgesicherten Initialisierung und scripting für ActiveX-Steuerelemente finden Sie unter der folgenden Microsoft-Website:
http://msdn2.microsoft.com/en-us/library/Aa751977.aspx
Weitere Informationen zur Entwicklung von webbasierten Lösungen für Microsoft Internet Explorer finden Sie auf folgenden Websites von Microsoft:
http://msdn.microsoft.com/ie/

http://support.microsoft.com/iep

Eigenschaften

Artikel-ID: 182598 - Geändert am: Dienstag, 16. Oktober 2007 - Version: 5.3
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
Keywords: 
kbmt kbfaq kbhowto KB182598 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 182598
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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