How to: Implement IObjectSafety nei controlli di Visual Basic

Traduzione articoli Traduzione articoli
Identificativo articolo: 182598 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

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:
http://www.microsoft.com/msj/0297/visualprog/visualprog0297.aspx
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:
http://msdn.microsoft.com/en-us/library/aa911729.aspx
Per ulteriori informazioni sull'inizializzazione sicuri e gli script per i controlli ActiveX, vedere il seguente sito Web Microsoft:
http://msdn2.microsoft.com/en-us/library/Aa751977.aspx
Per ulteriori informazioni sullo sviluppo di soluzioni basate sul Web per Internet Explorer, visitare i seguenti siti Web (informazioni in lingua inglese):
http://msdn.microsoft.com/ie/

http://support.microsoft.com/iep

Proprietà

Identificativo articolo: 182598 - Ultima modifica: martedì 16 ottobre 2007 - Revisione: 5.3
Le informazioni in questo articolo si applicano a:
  • 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
Chiavi: 
kbmt kbfaq kbhowto KB182598 KbMtit
Traduzione automatica articoli
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
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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