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

C# Discussion :

Créer un type de donnée numérique


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 84
    Points : 60
    Points
    60
    Par défaut Créer un type de donnée numérique
    Bonjour !
    J'appelle une fonction dans un DLL programmé en C++ et il prend un paramètre out qui me revient avec un ID numérique. Le problème est que le type long est trop petit et si j'utilise un type BigInteger il me donne une erreur :
    ************ Exception ******************
    Une exception non gérée du type 'System.AccessViolationException' s'est produite dans mscorlib.dll

    Informations supplémentaires*: Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée.
    **************************************

    Je crois que le C++ me renvoi trop de données avec un BigInteger. Donc, je ne sais pas s'il est possible de créer un type numérique, ou une class qui imiterait le comportement d'un long, mais un peu plus grand ?

  2. #2
    Membre averti Avatar de pascalCH
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Juillet 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 187
    Points : 369
    Points
    369
    Par défaut
    Hello,

    BigInteger étant un tableau de taille dynamique, il y a fort a parier que son remplissage par la Dll se termine par un débordement - ce qui correspond assez bien au type d'exception retourné.

    en passant par un tableau (de taille fixe mais suffisante) il doit être possible de contourner le problème, du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    byte[] byteArray = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    MaFonction ( out byteArray );
    BigInteger newBigInt = new BigInteger(byteArray);
    Par contre, il faudrait quand même chercher quel est le type réel de données censée être retournée par la fonction de la DLL, il n'est pas fréquent de dépasser le format UInt32, peut-être s'agit-il de nombre flottants.
    La nature fait des choses extraordinaires, observons la et restons humble, on ne nous demande pas de refaire le monde mais juste de reproduire virtuellement des choses existantes ....

    et n'oubliez pas si vous aimez et quand vous avez la réponse

Discussions similaires

  1. [Débutant] Comment créer un type de donnée ?
    Par xingjing910 dans le forum VB.NET
    Réponses: 11
    Dernier message: 28/03/2012, 16h19
  2. Comment définissez-vous les types de données numériques ?
    Par Patrick25300 dans le forum Firebird
    Réponses: 5
    Dernier message: 05/08/2011, 18h40
  3. Conseil ; créer un type de données
    Par subzero82 dans le forum C
    Réponses: 11
    Dernier message: 18/07/2008, 12h54
  4. [Turbo Pascal] Créer des types de variables numériques en Turbo Pascal
    Par INDEPTEKNO dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 05/07/2008, 22h38
  5. Créer son type de donnée
    Par progfou dans le forum Général Python
    Réponses: 5
    Dernier message: 14/12/2005, 09h31

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