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 :

passage de tableaux (matrices) entre manag� et non manag�


Sujet :

C++/CLI

  1. #1
    Membre �clair�
    Inscrit en
    Juillet 2006
    Messages
    298
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Par d�faut passage de tableaux (matrices) entre manag� et non manag�
    Tout d'abord, bonne ann�e � vous tous pour 2007.

    J'ai un projet en c++/cli utilisant des winforms pour entr��s et sorties de mon programme. J'utilise des matrices(100x100) et vecteurs(100) que j'ai cr�e et aliment� dans mon code manag�.
    J'ai une soubroutine critique (� ex�cuter rapidement). J'ai appris gr�ce � vous que cette fonction (sa d�finition) devait etre encadr�e par #pragma unmanaged et #pragma managed.
    Plusieurs questions:

    1 - la fonction sera-t-elle compil�e en natif ou en MSIL ? J'ai un doute car dans le forum MSDN, un internaute m'a �crit que le code de cette fonction serait en MSIL.

    2 - comment utiliser ces matrices et vecteurs dans ma fonction non manag�e ?
    marshaler, ou sauvegarder ces mat et vect dans un fichier et les rappeler par la fonction dans des pointeurs normaux ?

    3 - comment retourner ces valeurs dans mon code manag� ?

    Merci beaucoup et d'avance pour vos r�ponses .

    Fredkr

  2. #2
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    attention,
    il faut mesurer si le gain de temps est interessant, car les changements de monde manag� � monde non manag� sont couteux

    ensuite, tout d�pend de comment sont stock�es tes matrices, ce sont des array cli ?

    normalement, un code entour� des pragmas est compil� en natif

  3. #3
    Membre �clair�
    Inscrit en
    Juillet 2006
    Messages
    298
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Par d�faut
    Cher Nico-pyright, merci tout d'abord pour votre prompte r�ponse.

    J'ai bien lu un peu partout que du code non manag� (g�r�) serait compil� en natif mais j'ai inclus ci-dessous une petite partie d'une de vos FAQ qui m'interpelle.
    En outre, peut-on dire que si la fonction non g�r�e n'effectue que des calculs math�matiques (produits de matrices, op�rations bas niveaux, quelques conditions genre if, for....) et n'utilisant pas des fonctions compliqu�es serait compil�e en code natif ou MSIL tr�s performant proche du natif.


    "Une classe non manag�e par le CLR est dite native. Il faut cependant pr�ciser que dans ce cas, natif ne veut pas dire forc�ment langage machine. Quand le mode de compilation est l'un des /clr, alors le code g�n�r� est toujours du MSIL (sauf dans le cas o� le compilateur ne sait pas le g�n�rer).
    Par contre, quand le compilateur ne compile pas en mode /clr, alors le code est bien du langage machine."

    Excuse-moi encore pour mon ent�tement mais je dois prendre une d�cision rapidement. C'est soit cr�er une DLL pour ma fonction et le reste en c# (plus facile � d�velopper pour les winforms), soit rester en c++/cli et la fonction en non manag�.

    Merci d'avance pour vos r�ponses, qui me seront, j'en suis s�r, tr�s importantes.

    FredKr

  4. #4
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    je ne sais plus exactement quelle est ta question

    il existe deux types de "natif", abus de langage certainement ...

    - dans un environnement .Net (mode de compilation /clr), une classe native est une classe compil�e en .Net (MSIL), mais est une classe non g�r�e par le garbage collector. Donc pour faire simple, c'est une classe qui n'est pas pr�c�d�e par le mot cl� ref. Cependant, le code g�n�r� sera bien du MSIL

    - dans un environnement non .net (mode de compilation natif ou pour les zones entour�es par les pragma #unmanaged #managed), le code (fonction ou classes) g�n�r� sera du code natif (du code x86)

  5. #5
    Membre �clair�
    Inscrit en
    Juillet 2006
    Messages
    298
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Par d�faut
    Je peux donc en c++/cli, avoir le mode de compilation /clr et tout ce qui est entre #pragma unmanaged et #pragma managed sera en code natif (x86).

    Ma confusion est grande et a �t� amplifi�e quand j'ai regard� les webcasts c# o� il y a notamment des comparaisons de codes assembleurs r�sultants pour 2 fonctions simples identiques, l'une compil�e en MSIL et l'autre en c++ standard. Il y avait 4 fois plus de lignes de code en MSIL.
    Je me suis donc dit que le temps d'�xecution pouvait �tre dans le m�me rapport (je pourrais retrouver ce webcast chez MSDN).

    encore merci pour vos r�ponses.
    FredKr

  6. #6
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    c'est certain qu'il y a plus de code en MSIL, mais bien souvent, il y a une optimisation ensuite par .Net

    Je veux bien le lien de la webcast

  7. #7
    Membre �clair�
    Inscrit en
    Juillet 2006
    Messages
    298
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 298
    Par d�faut
    Bonjour Nico,
    Voici le lien :
    http://www.microsoft.com/France/Visi...2-d83a8ec21926

    C'�tait une comparaison entre c# et c++ exactement, donc pas entre c++/cli manag� et c++ dur.
    Mais comme pour le c# on obtient du code MSIL j'avais pens� que le C++/CLI manag� pouvait fournir le m�me genre de code.
    C'est vrai je suis un peu perdu avec tous ces diff�rents codes. Mon souci primordial est la rapidit� d'execution. Si cette partie n'est pas rapide je me dirigerai vers visual Fortran (que j'ai d�j� install�) mais avec tous ses inconv�nients pour la convivialit� des entr�es et sorties.

    Salutations,

    fredKr

  8. #8
    R�dacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par d�faut
    Merci, je regarderais ca

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. C# DLL manag� et non manag�
    Par damien77 dans le forum C#
    R�ponses: 1
    Dernier message: 01/07/2007, 03h32
  2. Echange d'objet entre classe manag�e et non manag�e
    Par alexadvance dans le forum C++/CLI
    R�ponses: 15
    Dernier message: 13/04/2007, 14h45
  3. convertir un type non manag� en type manag�.
    Par poporiding dans le forum MFC
    R�ponses: 6
    Dernier message: 22/05/2006, 10h49
  4. convertir un type non manag� en type manag�.
    Par poporiding dans le forum C++
    R�ponses: 3
    Dernier message: 22/05/2006, 09h44
  5. R�ponses: 6
    Dernier message: 19/12/2005, 16h36

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