none
erreurs CS0501 et CS0669 internal class // public

    Discussion générale

  • Bonjour à tous, j'ai ces deux erreurs CS0501 et CS0669 pour ce code.

    using System.Runtime.CompilerServices;
    using System.Runtime.InteropServices;

    namespace NatTraversal.Interop
    {
      [ClassInterface(ClassInterfaceType.None)]
      [TypeLibType(2)]
      [Guid("AE1E00AA-3FD5-403C-8A27-2BBDC30CD0E1")]
      [ComImport]
      internal class UPnPNATCreator
      {
        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
        public UPnPNATCreator(); // l'erreur est ici <-------------
      }
    }

    Je ne comprend pas tout à fais les erreurs et comment les corriger, j'ai tenter de trouver une solution sur google sans succès.

    Je vous remercie de votre aide et soutien.

    Popol85

    mercredi 20 avril 2016 06:13

Toutes les réponses

  • Bonjour Popol85, 

    En cherchant sur internet vous trouverez une explication aux deux messages : 

    • CS0669: A class with the ComImport attribute cannot have a user-defined constructor
    • CS0501: 'member function' must declare a body because it is not marked abstract, extern, or partial

    Pour la première, vous avez un attribut CompImport sur la classe. Lors de la compilation, cela empèche de pouvoir redéfinir le constructeur par defaut. La déclaration de la méthode UPnPATCreator n'est donc pas autorisée. 

    Pour la deuxième, votre méthode n'as pas de définition, vous devez donc définir le corps de cette méthode (entre les accolades). 

    Cordialement, 


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    mercredi 20 avril 2016 07:47
  • Bonjour BEAUGRAND Kevin et merci pour la réponse.

    J'ai remarquer qu'il m'arrive une contradiction, car je doit mettre {} pour déclaré un corps, mais en même temps il est interdit d'avoir de constructeur {}.

    J'ignore comment régler le problème, habituellement je code en vb.net et c'est un ami qui ma envoyer un vieux logiciel qu'il a trouver le code source et il veux que je corrige tout les bugs et il me reste que cela.

    C'est un vrais casse tête pour moi, car même si je lie sur msdn les code erreur, se ne me dit pas comment les corriger en donnent un exemple, la documentation n'est pas très claire, elle me dit juste comment créer l'erreur....

    Merci de votre aide.
    mercredi 20 avril 2016 16:28
  • Bonjour, 

    En fait je pense que c'est votre déclaration qui n'est pas correcte. 

    Je ne sais pas d'où viens ce code et ce qu'il est censé réaliser. 

    Mais si c'est pour corriger ces erreurs de compilations vous pouvez simplement faire quelquechose comme ceci : 

    using System.Runtime.CompilerServices;
    using System.Runtime.InteropServices;
    
    namespace NatTraversal.Interop
    {
      [ClassInterface(ClassInterfaceType.None)]
      [TypeLibType(2)]
      [Guid("AE1E00AA-3FD5-403C-8A27-2BBDC30CD0E1")]
      [ComImport]
      internal class UPnPNATCreator
      {
        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
        public void Create(){
    
        }
      }
    }
    J'ai simplement changé le nom de la méthode pour que ce ne soit pas considéré comme un constructeur et j'y ai ajouté le corps.

    Cordialement, 



    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    mercredi 20 avril 2016 17:11
  • J'ai vraiment pas de bols, j'ai l'erreur CS0423.

    J'ai fouiller dans tout la solution et voila les référence donné.

    \Visual Studio 2015\Projects\RM\NatTraversal\Interop\UPnPNAT.cs(12):  [CoClass(typeof (UPnPNATCreator))]

    \Visual Studio 2015\Projects\RM\NatTraversal\Interop\UPnPNATCreator.cs(2):// Type: NatTraversal.Interop.UPnPNATCreator

    \Visual Studio 2015\Projects\RM\NatTraversal\Interop\UPnPNATCreator.cs(16):  internal class UPnPNATCreator

    \Visual Studio 2015\Projects\RM\NatTraversal\Interop\UPnPNATCreator.cs(19):    public UPnPNATCreator();

    \Visual Studio 2015\Projects\RM\NatTraversal\UPnPNat.cs(54):        UPnPNAT upnPnat = (UPnPNAT) new UPnPNATCreator();

    Merci pour ton aide, c'est très apprécier.

    mercredi 20 avril 2016 17:55
  • Est-ce que nous pouvons avoir un brin du code du fichier UPnPNAT.cs ?

    A première vue, le fichier UPnPCreator.cs n'as que très peu d'utilité vu qu'il n'implémente aucune méthode. 

    Cordialement, 


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    mercredi 20 avril 2016 18:23
  • using NatTraversal.Interop;
    using RatioMaster;
    using System;
    using System.Collections;
    using System.Net;
    
    namespace NatTraversal
    {
      public class UPnPNat
      {
        private UPnPNAT uPnpNat;
        private Form1 _mainForm;
        public bool Enabled;
    
        public ArrayList PortMappings
        {
          get
          {
            if (this.uPnpNat == null)
              return (ArrayList) null;
            ArrayList arrayList = new ArrayList();
            int count = this.uPnpNat.StaticPortMappingCollection.Count;
            IEnumerator enumerator = this.uPnpNat.StaticPortMappingCollection.GetEnumerator();
            enumerator.Reset();
            for (int index = 0; index <= count; ++index)
            {
              IStaticPortMapping staticPortMapping = (IStaticPortMapping) null;
              try
              {
                if (enumerator.MoveNext())
                  staticPortMapping = (IStaticPortMapping) enumerator.Current;
              }
              catch
              {
              }
              if (staticPortMapping != null)
                arrayList.Add((object) new PortMappingInfo(staticPortMapping.Description, staticPortMapping.Protocol.ToUpper(), staticPortMapping.InternalClient, staticPortMapping.InternalPort, IPAddress.Parse(staticPortMapping.ExternalIPAddress), staticPortMapping.ExternalPort, staticPortMapping.Enabled));
            }
            return arrayList;
          }
        }
    
        public UPnPNat(Form1 mainForm)
        {
          this._mainForm = mainForm;
          try
          {
            UPnPNAT upnPnat = (UPnPNAT) new UPnPNATCreator();
            if (upnPnat.NATEventManager != null)
            {
              if (upnPnat.StaticPortMappingCollection != null)
                this.uPnpNat = upnPnat;
            }
          }
          catch (Exception ex)
          {
            this._mainForm.AddLogLine("Error initializing UPnP Nat : " + ex.Message);
          }
          if (this.uPnpNat == null)
            this._mainForm.AddLogLine("No configurable UPnP Nat is available");
          else
            this.Enabled = true;
        }
    
        public void AddPortMapping(PortMappingInfo portMapping)
        {
          if (this.uPnpNat == null)
            return;
          if (portMapping == null)
            return;
          try
          {
            this.uPnpNat.StaticPortMappingCollection.Add(portMapping.ExternalPort, portMapping.Protocol, portMapping.InternalPort, portMapping.InternalHostName, portMapping.Enabled, portMapping.Description);
          }
          catch
          {
          }
        }
    
        public void RemovePortMapping(PortMappingInfo portMapping)
        {
          if (this.uPnpNat == null)
            return;
          if (portMapping == null)
            return;
          try
          {
            this.uPnpNat.StaticPortMappingCollection.Remove(portMapping.ExternalPort, portMapping.Protocol);
          }
          catch
          {
          }
        }
      }
    }
    Merci. :)
    mercredi 20 avril 2016 18:41
  • Bonjour, Popol85,

    Pouvez-vous partager le contenu complet d'erreur CS0423 pour savoir si la méthode est externe ou abstraite ?
    (source: https://msdn.microsoft.com/fr-fr/library/a8hbk8dy%28v=vs.90%29.aspx)
    Je vous remercie par avance de votre retour.

    Cordialement,
    Teodora


    Votez! Appel à la contribution TechNet Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mardi 26 avril 2016 15:04
    Modérateur
  • Bonjour Teodora Sharkova et merci.

    Pour le code, j'ai tout mis sur la page, les deux sources, celle qui a l'erreur est tout en haut et celle qui en fais appel est un peut plus bas et plus long.

    Merci de votre aide.

    mardi 26 avril 2016 16:35
  • Up s.v.p, ça fais prêt d'un ans que je n'est pas trouver de solution, je suis avec Visual Studio 2015 et j'ai vue que c'est un code de Visual Studio 2008, donc j'ignore comment faire la conversion.

    Merci à tous.

    jeudi 23 mars 2017 21:31