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++/CLI Discussion :

Conversion double * non managé vers System::Array managé


Sujet :

C++/CLI

  1. #1
    Membre habitué Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Points : 131
    Points
    131
    Par défaut Conversion double * non managé vers System::Array managé
    Bonjour,

    j'ai une fonction c++ native qui renvoit un double *.

    Je souhaite effectué une conversion dans mon wrapper afin que le pointeur de double devienne un Array managé ou tout autre élément managé exploitable.

    Je sais qu'il faut passer par Marshal::AllocHGlobal mais je ne connais pas précisément comment faire...

    Merci pour votre aide.

  2. #2
    Membre habitué Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Points : 131
    Points
    131
    Par défaut
    Bon j'ai trouvé le problème seul via le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int len = 100;
    const double * matriceBase = ((const EX_Transformation *)pObject)->AskMatrix();
    array<double> ^arr = gcnew array<double>(len);
     
    IntPtr ptr = IntPtr((double*)matriceBase);
    System::Runtime::InteropServices::Marshal::Copy(ptr, arr, 0, len);
    Reste à savoir maintenant comment avoir la taille des données pointées par matriceBase. Autrement dit, déterminer la variable len afin qu'elle ne soit pas statique. Quelqu'un a-t-il une idée?

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Avec ça peut être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int len = sizeof(matriceBase) / sizeof(matriceBase[0]);
    Pas de questions techniques par MP

  4. #4
    Membre habitué Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Points : 131
    Points
    131
    Par défaut
    Ca ne marche pas

    J'ai l'erreur suivante : System.IndexOutOfRangeException.

  5. #5
    Membre habitué Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Points : 131
    Points
    131
    Par défaut
    Hmmmm après réflexion, ca ne serait pas plutôt ca la solution ???!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int len = sizeof(matriceBase) * sizeof(matriceBase[0]);

  6. #6
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Non justement. De mes souvenirs, lorsque la taille n'était pas connue, on divisait la taille du tableau (sizeof(tab)) par la taille d'un de ses éléments (sizeof(tab[0])), ce qui permettait d'avoir ainsi le nombre d'éléments dans le tableau.

    Vu l'erreur, on dirait que le tableau est vide au moment du calcul. Tu fais bien le calcul après avoir récupéré le tableau ? Et il n'est pas vide ?
    Pas de questions techniques par MP

  7. #7
    Membre habitué Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Points : 131
    Points
    131
    Par défaut
    Alors après documentation, il est impossible de deviner la nombre des éléments que pointent un pointeur, il faut impérativement avoir l'information dans une variable annexe.

    L'exemple que tu m'as donné ne marchait pas dans mon cas car j'avais un double *. Le sizeof de mon pointeur me retournait 4 et mon sizeof de mon élément me retournait 8, ce qui faisait 4 / 8 = 0,5 autrement dit 0 en int d'où l'erreur générée.

    En fait, ton exemple marche uniquement lorsqu'on alloue un tableau statique du type double[]. Dans ce cas, les sizeof pointent sur des allocations mémoire prédéfinies.

    Il est à noter que dès lors où on passe un tableau statique en paramètre d'une fonction, il se transforme en pointeur du type d'élément. Les sizeof ne marchent alors plus par la suite!

    J'ai résolu mon problème en retrouvant la taille de mon double *, il était plafonné à 16 dans une en-tête de classe et je ne l'avais pas vu donc connaissant la taille maximale, je n'ai plus eu de problème!

    Voila, merci!

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

Discussions similaires

  1. Conversion d'exception stl vers System::exception
    Par nikopol82 dans le forum C++/CLI
    Réponses: 0
    Dernier message: 03/02/2009, 10h32
  2. Conversion de C++ builder vers Visual C++/C# managé
    Par Gragra dans le forum EDI/Outils
    Réponses: 4
    Dernier message: 13/06/2008, 18h37
  3. [CHERCHE] Système de management de projet
    Par ptr83 dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 21/09/2006, 22h18
  4. Réponses: 2
    Dernier message: 09/08/2006, 15h06
  5. Pb de conversion: double[] vers un vector type???
    Par hycsos dans le forum SL & STL
    Réponses: 4
    Dernier message: 15/01/2006, 07h59

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