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

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
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
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 : 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 : 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 : 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 :
initialisation de persistance script de sécurité

Avertissement : Cet article a été traduit automatiquement.

Propriétés

ID d'article : 182598 - Dernière mise à jour : 12/05/2015 08:28:54 - Révision : 5.3

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

  • kbnosurvey kbarchive kbmt kbfaq kbhowto KB182598 KbMtfr
Commentaires