Jak provést IObjectSafety v prvky jazyka

Překlady článku Překlady článku
ID článku: 182598 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

Tento článek popisuje, jak implementovat rozhraní IObjectSafety ovládací prvky jazyka označit bezpečný pro skriptování a inicializaci ovládací prvky. Ovládací prvky jazyka standardně používat součást kategorie položky v registru označit tento prvek bezpečný pro skriptování a inicializaci. Implementace rozhraní IObjectSafety je upřednostňovanou metodou. Tento článek obsahuje kód, který je vyžadován implementovat toto rozhraní ovládací prvky jazyka.

Prosím pamatujte, že ovládací prvek má pouze být označen jako bezpečný, pokud je to, ve skutečnosti bezpečné. Tento článek nepopisuje podrobnosti označení ovládací prvky jako bezpečný pro skriptování a inicializaci; jednoduše znázorňuje způsob proveďte v kódu. Naleznete v dokumentaci Internet Client Software Development Kit (SDK) pro podrobný popis této. "Bezpečných inicializaci a skriptování pro ActiveX Controls" naleznete v části Component Development.

Další informace

Upozornění: jedna nebo více následujících funkcí popisované v tomto článku: VarPtr VarPtrArray, VarPtrStringArray StrPtr a ObjPtr. Tyto funkce nejsou podporovány odbornou Microsoft. Nejsou popsány v dokumentaci jazyka a jsou poskytovány v tomto článku znalostní báze Knowledge Base tak, jak je. Společnost Microsoft nezaručuje, že budou k dispozici v příštích verzích jazyka. Další informace o těchto funkcí klepněte na článek číslo článku databáze Microsoft Knowledge Base:
199824Jak získat adresa proměnné jazyka
Následující kroky ukazují, jak vytvořit jednoduchý ovládací prvek jazyka a označit jako bezpečný pro skriptování a inicializaci.
  1. Vytvořit novou složku můžete uložit všechny soubory, které vytvoříte v tomto příkladu.
  2. Získat Generator knihovny typů automatizace OLE z CD-ROM Visual Basic 6.0. Chcete-li to provést, zkopírujte všechny čtyři soubory ze složky \Common\Tools\VB\Unsupprt\Typlib\ složky projektu. Poznámka: Kopírovat všechny soubory ze složky \VB5.0\Tools\Unsupprt\Typlib\ v VIsual Basic 5.0.
  3. Zkopírujte následující text do programu Poznámkový blok a uložte soubor ve složce projektu jako 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. Na příkazovém řádku použít <cesta>CD-ROM <path> příkazu přesunout do složky projektu a zadejte následující příkaz generování souboru .tlb:
    MKTYPLIB objsafe.odl/TLB objsafe.tlb
  5. Z jazyka vytvořit projekt prvku ActiveX. V seznamu Vlastnosti změnit název projektu IObjSafety a název ovládacího prvku DemoCtl. Umístit CommandButton cmdTest ovládací prvek s názvem. V události Click popisovač cmdTest, umístit MsgBox "Test" výkazu.
  6. V nabídce projekt klepněte na příkaz odkazy vyhledat a přidat Objsafe.tlb, které jste vytvořili dříve.
  7. Přidat nový modul projektu s následujícím kódem a název modulu 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. Z vlastnosti projektu změnit spouštěcí objekt Sub Main execute Sub Main výše. Slouží k určení hodnoty bezpečný pro skriptování a inicializaci proměnné proměnné m_fSafeForScripting a m_fSafeForInitializing.
  9. Otevřete okno Kód ovládání. Přidejte následující řádek kódu části deklarace (vpravo po Option Explicit nebo jako první):
    Implements IObjectSafety
    					
  10. Zkopírujte následující dva postupy kód ovládací prvky:
          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. V nabídce soubor uložte projekt a soubory. Zkontrolujte soubor OCX z projektu. Ovládání nyní implementuje rozhraní IObjectSafety. Otestovat, vložení ovládacího prvku do souboru HTM.

Odkazy

MkTypLib.exe je staré nástroj dříve dodané s Platform Software Development Kit (SDK), který je součástí Microsoft Visual Studio 6.0. Aktuální Platform SDK nejsou přepnuty nástrojem MkTypLib.exe.

Informace o vyvolat MkTypLib naleznete na následujícím webu:
http://www.microsoft.com/msj/0297/visualprog/visualprog0297.aspx
Další informace naleznete v následujících článcích znalostní báze Microsoft Knowledge Base:
161873Jak označit MFC Controls Safe pro skriptování a inicializaci
143258Jak vytvořit konstanty a deklarací DLL v knihovně typů
131105UKÁZKOVÝ: TYPEBLD: použití ICreateTypeLib a ICreateTypeInfo
Další informace o rozhraní IObjectSafety naleznete na následujícím webu:
http://msdn.microsoft.com/en-us/library/aa911729.aspx
Další informace o nouzovém inicializaci a skriptování ovládacích prvků ActiveX naleznete na následujícím webu:
http://msdn2.microsoft.com/en-us/library/Aa751977.aspx
Další informace o vývoji řešení založených na webu pro aplikaci Microsoft Internet Explorer navštivte následující weby:
http://msdn.microsoft.com/ie/

http://support.microsoft.com/iep

Vlastnosti

ID článku: 182598 - Poslední aktualizace: 16. října 2007 - Revize: 5.3
Informace v tomto článku jsou určeny pro produkt:
  • 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
  • 128bitová verze aplikace Microsoft Internet Explorer 4.0
  • 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
Klíčová slova: 
kbmt kbfaq kbhowto KB182598 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:182598

Dejte nám zpětnou vazbu

 

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