c # - erreur lors de la compilation du ciblage Compact Net Framework 3.5 - Aucune surcharge pour la méthode 'GetString' ne prend les arguments '1'

StackOverflow https://stackoverflow.com/questions/402648

Question

J'ai en fait deux questions concernant le même problème mais je pense qu'il est préférable de les séparer car je ne pense pas qu'elles soient liées.

Contexte: J'écris un logiciel Windows Mobile dans VB.NET qui, parmi ses tâches, a besoin de se connecter à un serveur de messagerie pour envoyer et récupérer des courriers électroniques. En conséquence, j'ai également besoin d'un analyseur Mime (pour décoder et encoder) les courriels afin d'obtenir les pièces jointes. J'ai d'abord pensé que j'écrirais un petit "hack". pour traiter ce problème (en utilisant l'analyse syntaxique ordinaire), mais j'ai ensuite vu un projet, écrit en C #, sur CodeProject que je pensais mettre en œuvre dans ma solution. Je ne connais pas grand chose à propos de C #, j'ai donc simplement créé une bibliothèque de classes à partir des classes et je l'ai utilisée dans mon projet VB.NET. Cette bibliothèque fonctionne très bien lorsque je cible Net Framework sur des ordinateurs Windows normaux. Toutefois, lorsque je voulais créer la même bibliothèque ciblant Compact Net Framework, je rencontrais des problèmes. Cela est naturel car le Compact Net Framework a plus de limites, mais je n’ai pas eu beaucoup d’erreurs, seulement deux, bien que répétés à divers endroits du code.

Une des erreurs est celle citée dans le sujet de cette question, à savoir "Pas de surcharge pour la méthode" GetString "prend" 1 "arguments". Comme mentionné ci-dessus, je ne connais pas grand chose à C #, alors j'ai converti la classe avec l'erreur en ligne en VB-NET mais je ne comprends toujours pas grand chose. Voici la fonction qui donne l'erreur indiquée ci-dessus:

public virtual string DecodeToString(string s)
{
  byte[] b = DecodeToBytes(s);
  if(m_charset != null)
  {
    //ERROR ON THIS LINE
    return System.Text.Encoding.GetEncoding(m_charset).GetString(b);
  }
  else
  {
    m_charset = System.Text.Encoding.Default.BodyName;
    //ERROR ON THIS LINE
    return System.Text.Encoding.Default.GetString(b);
  }
}

Si le code source complet est nécessaire pour cette classe, je peux le poster dans un autre message de ce fil ou le trouver en téléchargeant le code sur le site Web mentionné ci-dessus et en consultant la classe. nommé MimeCode.cs.

Quelqu'un qui peut m'aider? Puis-je réécrire la fonction ci-dessus pour surmonter ce problème?

Je vous remercie d'avance de votre aide.

Cordialement et bonne année à vous tous.

Rgds, moster67

Était-ce utile?

La solution

CF .NET vous oblige à utiliser la signature: Encoding.GetString, méthode (array [], index Int32, nombre Int32). Veuillez donc utiliser:

...GetString(b, 0, b.Length);

Autres conseils

Si vous recherchez la classe Encoding sur MSDN, vous obtiendrez des informations sur la disponibilité des méthodes dans l'infrastructure compacte.

http://msdn.microsoft.com /en-us/library/system.text.encoding.default.aspx

Dans votre cas, la propriété System.Text.Encoding.Default est prise en charge par .NET Compact Framework 3.5, 2.0, 1.0 et vous devez donc être entièrement défini.

Mais voici la chose. MS abandonne parfois des méthodes de l'implémentation de la classe, ou pour être précises.

Consultation de la documentation http://msdn.microsoft.com/en- us / library / system.text.encoding.getstring.aspx vous pouvez voir en regardant les icônes (petites images à gauche) que, bien que le .NET Compact Framework prenne en charge la classe de codage, certaines surcharges ont été supprimées.

Lorsque vous passez le tableau byte [] à la méthode GetString, il ne peut pas trouver cette surcharge, vous devez donc ajouter un décalage int et un compte int.

Le cadre compact ne prend probablement pas en charge la surcharge prenant uniquement un tableau d'octets. Essayez la surcharge qui prend le tableau d'octets, un index de début et un compte et attribuez-lui 0 comme index de début et b.Length comme longueur.

Merci à Michael, John et Rune d'avoir répondu à ma question. En utilisant vos suggestions, j'ai résolu le problème et j'ai réussi à compiler / construire la bibliothèque ciblant le fichier CF.NET 3.5. Merci également à ctacke d’avoir modifié ma question et de la rendre plus lisible.

BTW, comme mentionné dans mon premier post, j'avais un autre problème que je voulais poser dans un autre fil de discussion et qui ne me permettait pas de construire la bibliothèque pour CF.NET, à savoir la ligne:

m_charset = System.Text.Encoding.Default.BodyName;

Dans ce cas, le problème est que CF.NET ne reconnaît pas "BodyName". Je ne pouvais trouver aucune autre solution ou solution de contournement pour utiliser le jeu de caractères utilisé (BodyName récupère ces informations). À la fin, je lui ai simplement attribué une valeur fixe (iso-8859-1). Cela signifie malheureusement que la bibliothèque ne gérera pas tous les jeux de caractères différents, mais au moins le code ne sera pas cassé et j'ai pu le compiler. Dans tous les cas, cela suffit pour moi, car mon application ne se soucie pas des messages texte: elle utilise des courriers électroniques pour envoyer et obtenir des pièces jointes (similaire à Gmail-Drive mais avec mon propre fournisseur).

Merci encore une fois.

Cordialement, moster67

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top