IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Par défaut vb.net pour Excel (dll) et Intellisense, comment masquer Equals, GetType, GetHashCode et ToString sous Excel ?
    Bonjour,

    J'écris une dll pour l'utiliser (entre autre) sous Excel en VBA.

    J'ai intégrer la ligne :

    <ClassInterface(ClassInterfaceType.AutoDual), ComVisible(True)> _

    Avant chaque déclaraation de mes classes pour activer l'intellisense sous Excel. Jusque là tout fonctionne (j'ai activé l'inter Op... et regasm), sauf que en plus de mes propriétés et méthodes, j'ai également 3 méthodes supplémentaires et une propriété qui ne me servent à rien et viennent polluler mon affichage lorsque je code en VBA :

    Equals
    GetType
    GetHashCode
    ToString

    En recherchant sous google, j'ai lu que ces propriétés sont en fait héritées de la classe Object mais sont souvent complètement inutile pour l'utilisateur final.

    Y a-t-il un moyen (dans le code ou le paramétrage de l'interopérabilité entre .net et COM), de masquer ces méthodes et cette propriété pour n'avoir que celle codées dans mes class ?

    J'ai eu beau chercher je n'ai rien trouvé à ce sujet (ou plutôt des questions sur comment faire, souvent en anglais et en C, mais sans vraiment de solution et encore moins en VB), pourtant il y a plein d'objets dispo au travers d'autres dll (cf liste dans les références) pour lesquels ces méthodes n'apparaissent pas...

    Quelqu'un sait-il comment faire pour les masquer ?

    Merci

    Philoul

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour

    La visibilite à com pour les class comme les props,methodes est controle par l'attribut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <ComVisible(False)>
    Ceci permet de n'exposer que les props et methodes voulus à Com et l'ensemble à .Net .
    Bien entendu ces props et methodes doivent etre publiques...
    Pour les props heritees il faut les redclarer avec overrides ou overloads sans les modifier...

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    Imports System.Runtime.InteropServices
     
    <ComClass(MyComClass.ClassId, MyComClass.InterfaceId, MyComClass.EventsId)> _
    Public Class MyComClass
     
    #Region "GUID COM"
        ' Ces GUID fournissent l'identité COM pour cette classe 
        ' et ses interfaces COM. Si vous les modifiez, les clients 
        ' existants ne pourront plus accéder à la classe.
        Public Const ClassId As String = "EA784A1F-E439-4957-8C6D-BF3A671260EF"
        Public Const InterfaceId As String = "1AC7BA18-0A23-4572-9504-6B54A039B6FC"
        Public Const EventsId As String = "F11F069C-053A-4910-89E3-B7956221E966"
    #End Region
     
        ' Une classe COM pouvant être créée doit avoir Public Sub New() 
        ' sans paramètre, sinon, la classe ne sera pas 
        ' inscrite dans le Registre COM et ne pourra pas être créée 
        ' via CreateObject.
        Public Sub New()
            MyBase.New()
        End Sub
        'PROP VISIBLE À NET & COM =>  PAR  DEFAUT
        Public ReadOnly Property OtherName As String
            Get
                Return "BoboNet & Com"
            End Get
     
        End Property
     
        'PROP VISIBLE À .NET SEULEMENT
        <ComVisible(False)>
        Public ReadOnly Property Name As String
            Get
                Return "BoboNet"
            End Get
     
        End Property
     
        <ComVisible(False)>
        Public Overrides Function GetHashCode() As Integer
            Return MyBase.GetHashCode()
        End Function
        <ComVisible(False)>
        Public Overrides Function ToString() As String
            Return MyBase.ToString()
        End Function
    End Class
    bon code......

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Par défaut
    Bonjour et merci pour la réponse, (qui m'a presque permis de résoudre mon problème et en plus d'améliorer mon code avec l'ajout de la Sub New())

    Cela marche nickel pour ToString, GetHashCode, et Equals qui ont bien disparu de l'intellisense, en revanche je n'arrive pas à traiter "GetType" :

    J'ai écris le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        <ComVisible(False)>
        Public Overrides Function GetType () As Type
            Return MyBase.GetType()
        End Function
    Mais j'ai l'erreur "Keyword is not valid identifier" sur le nom de fonction "GetType"

    Philoul

  4. #4
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    re

    Bizarre ,moi en revanche en .Net 4.0 je n'ai pas de GetType() dans l'intellisense en vba.
    Ni dans les overrides ou overloads en vb.net ...
    De plus pour Msdn Doc les seules methodes surchargeables sont (citation):
    Les classes dérivées peuvent substituer certaines de ces méthodes, notamment :

    Equals - Prend en charge les comparaisons entre objets.

    Finalize - Effectue des opérations de nettoyage avant qu'un objet soit automatiquement récupéré.

    GetHashCode - Génère un nombre correspondant à la valeur de l'objet pour prendre en charge l'utilisation d'une table de hachage.

    ToString - Fabrique une chaîne de texte explicite qui décrit une instance de la classe.
    Pour GetType() ca n'est donc pas possible helas...
    bon code...

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Par défaut
    Ok, en tout cas merci pour ton aide.

    Problème résolu (au GetType près...)

    Philoul

  6. #6
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Bonjour,

    C'est parce que GetType est considéré comme étant un mot clé. Et lorsqu'on est dans ce cas, il faut encadrer le mot clé par des crochets.

    Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)>
        Public Overloads Function [GetType]() As Type
            Return MyBase.GetType
        End Function

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/06/2014, 15h18
  2. Comment Enregistrer Une page WEB En VBA sous excel
    Par BEMI dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/05/2009, 23h15
  3. Réponses: 3
    Dernier message: 20/03/2009, 16h22
  4. Réponses: 1
    Dernier message: 30/06/2006, 15h49
  5. [VB.NET] comment installer interop.Excel.dll (11.0) ?
    Par beegees dans le forum Windows Forms
    Réponses: 24
    Dernier message: 09/06/2006, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo