How to: Implement IObjectSafety nei controlli di Visual Basic

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 182598
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
Sommario
In questo articolo viene descritto come implementare l'interfaccia IObjectSafety nei controlli di Visual Basic per contrassegnare i controlli sicuri per la creazione di script e l'inizializzazione. Per impostazione predefinita, i controlli di Visual Basic utilizzano componente categoria voci nel Registro di sistema per contrassegnare il controllo come sicuro per la creazione di script e l'inizializzazione. Implementazione dell'interfaccia IObjectSafety è il metodo preferito. In questo articolo contiene il codice necessario per implementare questa interfaccia nei controlli di Visual Basic.

Tenere presente che un controllo deve solo essere contrassegnato come sicuro in questo caso, infatti, sicuro. In questo articolo non descrive i dettagli di contrassegnare i controlli come sicuri per la creazione di script e l'inizializzazione; semplicemente viene illustrato come eseguire questa operazione nel codice. Fare riferimento alla documentazione di Internet Client SDK (Software Development Kit) per una descrizione dettagliata di questo. Vedere "Provvisoria Initialization e scripting per ActiveX Controls" nella sezione Component Development.
Informazioni
Avviso: in questo articolo vengono illustrate una o più delle seguenti funzioni: VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, ObjPtr e. Queste funzioni non sono supportate dal servizio supporto tecnico clienti Microsoft. Essi non sono documentate nella documentazione di Visual Basic e vengono forniti in questo articolo della Knowledge Base "così"com'è. Microsoft non garantisce che saranno disponibili nelle versioni future di Visual Basic. Per ulteriori informazioni su queste funzioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
199824How to: get dell'indirizzo di variabili in Visual Basic
La procedura descritta di seguito illustra come creare un semplice controllo di Visual Basic e contrassegnarla come sicuri per la creazione di script e l'inizializzazione.
  1. Creare una nuova cartella in cui è possibile salvare tutti i file creati in questo esempio.
  2. Ottenere il Generatore di libreria dei tipi di automazione OLE dal CD di Visual Basic 6.0. Per effettuare questa operazione, copiare tutti e quattro i file dalla cartella \Common\Tools\VB\Unsupprt\Typlib\ alla cartella del progetto. Nota: copiare tutti i file dalla cartella \VB5.0\Tools\Unsupprt\Typlib\ in VIsual Basic 5.0.
  3. Copiare il testo seguente nel blocco note e salvare il file nella cartella del progetto come 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. Al prompt dei comandi, utilizzare il CD di <path><percorso> comando per passare alla cartella del progetto e digitare il comando riportato di seguito per generare un file tlb:
    MKTYPLIB objsafe.odl /tlb objsafe.tlb
  5. Da Visual Basic, creare un progetto di controllo ActiveX. Nell'elenco proprietà, modificare il nome del progetto in IObjSafety e il nome del controllo per DemoCtl. Inserire un controllo CommandButton denominato cmdTest sul controllo. Nel gestore dell'evento Click di cmdTest di inserire un'istruzione MsgBox "Test".
  6. Scegliere riferimenti dal menu progetto, individuare e aggiungere Objsafe.tlb, creato in precedenza.
  7. Aggiungere un nuovo modulo al progetto con il codice riportato di seguito e il nome del modulo 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. Da proprietà di progetto, modificare l'oggetto di avvio su Sub Main per l'esecuzione di Sub Main sopra indicati. Utilizzare le variabili di m_fSafeForScripting e m_fSafeForInitializing per specificare i valori di sicuro per le variabili di script e/o l'inizializzazione.
  9. Aprire la finestra del codice del controllo. Aggiungere la seguente riga di codice alla sezione declaration (subito dopo Option Explicit o del primo):
    Implements IObjectSafety					
  10. Copiare il codice dei controlli nelle due procedure riportate di seguito:
          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. Dal menu file, salvare il progetto e i file. Rendere un file OCX dal progetto. Il controllo ora implementa l'interfaccia IObjectSafety. Per provare l'effetto, inserire il controllo in un file htm.
Riferimenti
MkTypLib.exe è un vecchio strumento fornite in precedenza con il Platform Software Development Kit (SDK) fornito con Visual Studio 6.0. Corrente Platform SDK non viene fornito con lo strumento MkTypLib.exe.

Per informazioni su come richiamare MkTypLib, vedere il seguente sito Web Microsoft: Per ulteriori informazioni, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportati di seguito:
161873How to: safe controlli MFC Segna per scripting/inizializzazione
143258Creazione di DLL dichiarazioni e costanti in una libreria dei tipi
131105SAMPLE: TYPEBLD: How to Use ICreateTypeLib e ICreateTypeInfo
Per ulteriori informazioni sull'interfaccia IObjectSafety, vedere il seguente sito Web Microsoft: Per ulteriori informazioni sull'inizializzazione sicuri e gli script per i controlli ActiveX, vedere il seguente sito Web Microsoft: Per ulteriori informazioni sullo sviluppo di soluzioni basate sul Web per Internet Explorer, visitare i seguenti siti Web (informazioni in lingua inglese):
inizializzazione di persistenza scripting di sicurezza

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 182598 - Ultima revisione: 12/05/2015 08:28:54 - Revisione: 5.3

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

  • kbnosurvey kbarchive kbmt kbfaq kbhowto KB182598 KbMtit
Feedback