Comment faire pour implémenter IObjectSafety dans des contrôles Visual Basic

Traductions disponibles Traductions disponibles
Numéro d'article: 182598 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Résumé

Cet article explique comment implémenter l'interface IObjectSafety dans des contrôles de Visual Basic pour marquer les contrôles fiable pour l'écriture de scripts et d'initialisation. Par défaut, les contrôles Visual Basic utilisent des entrées de catégorie de composant dans le Registre pour marquer le contrôle fiable pour l'écriture de scripts et d'initialisation. En implémentant l'interface IObjectSafety est la méthode recommandée. Cet article contient tout le code est requis pour implémenter cette interface dans les contrôles Visual Basic.

Gardez à l'esprit qu'un contrôle doit uniquement être marqué comme sécurisés s'il s'agit, en fait, en toute sécurité. Cet article ne décrit pas les détails de marquage des contrôles sûrs pour l'écriture de scripts et l'initialisation ; il illustre simplement comment faire dans le code. Reportez-vous à la documentation Kit de développement (SDK) Internet Client pour obtenir une description détaillée de cette. Consultez «sans échec d'initialisation et Scripting pour contrôles ActiveX» sous la section Component Development.

Plus d'informations

Avertissement : un ou plusieurs des fonctions suivantes sont abordées dans cet article : VarPtr, VarPtrArray, VarPtrStringArray, StrPtr et ObjPtr. Ces fonctions ne sont pas prises en charge par le support technique Microsoft. Ils ne sont pas documentés dans la documentation de Visual Basic et sont fournies dans cet article de la base de connaissances «en l'état». Microsoft ne garantit pas qu'ils seront disponibles dans les futures versions de Visual Basic. Pour plus d'informations sur ces fonctions, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
199824Comment faire pour obtenir l'adresse des variables dans Visual Basic
Les étapes suivantes illustrent comment créer un contrôle Visual Basic simple et marquez-le fiable pour l'écriture de scripts et d'initialisation.
  1. Créer un nouveau dossier où vous pouvez enregistrer tous les fichiers que vous créez dans cet exemple.
  2. Permet d'obtenir le Générateur de bibliothèque de types Automation OLE à partir du CD-ROM de Visual Basic 6.0. Pour ce faire, copier les quatre fichiers à partir du dossier \Common\Tools\VB\Unsupprt\Typlib\ dans votre dossier de projet. Remarque : copier tous les fichiers à partir de dossier \VB5.0\Tools\Unsupprt\Typlib\ dans VIsual Basic 5.0.
  3. Copiez le texte suivant dans le bloc-notes et enregistrez le fichier dans le dossier du projet en tant que 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. À une invite de commandes, utilisez le CD <path> commande Déplacer vers le dossier de projet et tapez la commande suivante pour générer un fichier .tlb :
    MKTYPLIB objsafe.odl /tlb objsafe.tlb
  5. Dans Visual Basic, créez un projet de contrôle ActiveX. Dans la liste Propriétés, modifier le nom du projet à IObjSafety et le nom du contrôle pour DemoCtl. Placez un contrôle CommandButton nommé cmdTest sur le contrôle. Dans le Gestionnaire d'événements Click de le cmdTest, placez une instruction MsgBox "Test".
  6. Dans le menu projet, cliquez sur références, parcourir et en ajouter Objsafe.tlb, que vous avez créé précédemment.
  7. Ajoute un module de nouveau à votre projet avec le code suivant et nommez le module 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. Propriétés du projet, remplacez l'objet de démarrage par Sub Main pour exécuter le Sub Main ci-dessus. Les variables m_fSafeForScripting et m_fSafeForInitializing permet de spécifier les valeurs de sûr pour les variables de script et/ou de l'initialisation.
  9. Ouvrez la fenêtre de code de votre contrôle. Ajoutez la ligne de code suivante à la section de déclaration (juste après l'option Explicit ou que la première):
    Implements IObjectSafety
    					
  10. De copier les deux procédures suivantes à vos contrôles :
          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. Dans le menu fichier, enregistrer votre projet et les fichiers. Créer un fichier OCX à partir de votre projet. Désormais, votre contrôle implémente l'interface IObjectSafety. Pour la tester, insérez le contrôle dans un fichier .htm.

Références

MkTypLib.exe est un outil ancien précédemment livré avec la plate-forme Kit de développement logiciel (SDK) fourni avec Microsoft Visual Studio 6.0. L'actuel kit de développement Platform SDK n'est pas à l'aide de l'outil MkTypLib.exe.

Pour informations sur la façon d'appeler MkTypLib, voir le site Web de Microsoft à l'adresse suivante :
http://www.microsoft.com/msj/0297/visualprog/visualprog0297.aspx
Pour plus d'informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la base de connaissances Microsoft :
161873Comment faire pour marquer MFC Controls Safe pour Scripting/de l'initialisation
143258Comment faire pour créer des constantes et des déclarations de DLL dans une bibliothèque de types
131105EXEMPLE : TYPEBLD : How to Use ICreateTypeLib et ICreateTypeInfo
Pour plus d'informations sur l'interface IObjectSafety, consultez le site Web de Microsoft à l'adresse suivante :
http://msdn.microsoft.com/en-us/library/aa911729.aspx
Pour plus d'informations sur l'initialisation sans échec et les scripts pour les contrôles ActiveX, consultez le site Web de Microsoft à l'adresse suivante :
http://msdn2.microsoft.com/en-us/library/Aa751977.aspx
Pour plus d'informations sur le développement de solutions Web de Microsoft Internet Explorer, reportez-vous aux sites Web de Microsoft aux adresses suivantes :
http://msdn.microsoft.com/ie/

http://support.microsoft.com/iep

Propriétés

Numéro d'article: 182598 - Dernière mise à jour: mardi 16 octobre 2007 - Version: 5.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic Control Creation Edition
  • Microsoft Visual Basic 5.0 Édition professionnelle
  • Microsoft Visual Basic 6.0 Édition professionnelle
  • Microsoft Visual Basic 5.0 Édition Entreprise
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 5.0 Édition initiation
  • Microsoft Visual Basic 6.0 Édition initiation
  • Microsoft Internet Explorer 4.0 Édition 128 bits
  • 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
Mots-clés : 
kbmt kbfaq kbhowto KB182598 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 182598
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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