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 :

Passer une structure C depuis C#


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 41
    Points : 36
    Points
    36
    Par défaut Passer une structure C depuis C#
    depuis une IHM en C#, je dois appeler plusieurs fonctions C/C++ d'une DLL.

    dans le code C++, j'ai, par exemple, la fonction suivante (.h):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern	EXPORTTOTEM_API float LaunchDll_ForceRa ( char Version, float ErrMax,  int &iMax,   float &Roughness,  struct RaConstants *constIn, struct RaInputs *dataIn);
    associé avec le code .cpp suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    extern "C" EXPORTTOTEM_API float LaunchDll_ForceRa ( char Version, 
    float ErrMax,  int &iMax,  float &Roughness,  struct RaConstants *constIn, struct RaInputs *dataIn)
    {
    return Dll_ForceRa(Version, ErrMax, iMax, Roughness, constIn, dataIn);
    }
    la structure RaConstants est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct RaConstants
    {
    	float aRa;			//Adjusting coefficient (ratio roll Ra/ strip Ra)
    	float eelong;		//adjusting exponent of elongation
    	float aelong;		//offset of elongation
    	float melong;		//elongation slope correction
    	float Rainf;		//Roll Ra at infinite length
    	float Lc;			//critical combination of roll and force
    	float CRa;			//correction of resulting Ra
    	float eSF;			//exponent of SF for the simar solution
    	float J;				//coefficient to give form to the Brillouin function
    	float SFn;			//nominal specific force, normalizes the SF
    };
    et RaInputs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct	RaInputs
    {
    	float RaObj;		//objective of desired Ra
    	float elong;		//desired elongation
    	float RaNomFict;	//Roll initial Ra (new or reused roll)
    	float LFn;			//roll length and force combined and accumulated
     
    };
    La dll fonctionne parfaitement.

    Mon problème est au niveau du code C#

    Depuis l'IHM, l'utilisateur peut saisir l'ensemble des paramétres nécessaires puis doit lancer la méthode LaunchDll_ForceRa en cliquant sur un bouton.

    J'ai ajouté le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [DllImport("DLL_RaFTmodel.dll", CharSet = CharSet.Ansi)]
                   static private extern float LaunchDll_ForceRa ( char Version, float ErrMax, out int iMax, out float Roughness, struct RaConstants *constIn, struct RaInputs *dataIn);
    et l'équivalent des structures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    [StructLayout(LayoutKind.Sequential)] 
            public class RaConstantsCSharp 
            { 
                public float aRa;			
    	        public float eelong;		
    	        public float aelong;		
    	        public float melong;		
    	        public float Rainf;		
    	        public float Lc;	
    	        public float CRa;		
    	        public float eSF;	
    	        public float J;	
    	        public float SFn;	
            }
     
            [StructLayout(LayoutKind.Sequential)] 
            public class RaInputsCsharp
            {
    	        public float RaObj;		
    	        public float elong;		
    	        public float RaNomFict;	
    	        public float LFn;	
            };
    comment passer la structure RaConstantsCSharp à la place de struct RaConstants *constIn et la structure RaInputsCsharp à la place de struct RaInputs *dataIn?

    Egalement dans ma fonction, j'ai mis out int iMax à la place de int &iMax? Est-ce juste?

    Merci pour votre aide.

  2. #2
    Membre actif
    Inscrit en
    Octobre 2007
    Messages
    236
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2007
    Messages : 236
    Points : 233
    Points
    233
    Par défaut
    Voici un blog où tu peux trouver de l'aide, j'espère...
    http://blog.developpez.com/nico-pyri...tilisation-de/

    Edit :
    Voici d'autres :
    http://blog.developpez.com/?s=dllimport

  3. #3
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Essaye
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [DllImport("DLL_RaFTmodel.dll", CharSet = CharSet.Ansi)]
                   static private extern float LaunchDll_ForceRa ( char Version, float ErrMax, out int iMax, out float Roughness, ref RaConstants constIn, ref RaInputs dataIn);
    ou
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [DllImport("DLL_RaFTmodel.dll", CharSet = CharSet.Ansi)]
                   static private extern float LaunchDll_ForceRa ( char Version, float ErrMax, ref int iMax, ref float Roughness, ref RaConstants constIn, ref RaInputs dataIn);

Discussions similaires

  1. Passer une structure en argument
    Par phoibe dans le forum C
    Réponses: 20
    Dernier message: 22/11/2007, 19h56
  2. passer une date choisi depuis l'interafce
    Par deklog dans le forum XMLRAD
    Réponses: 5
    Dernier message: 20/08/2007, 17h19
  3. Gtk: problème pour passer une structure en paramètres
    Par C_Chaou dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 19/04/2007, 19h29
  4. Passer une structure dans une fonction ...
    Par pilouface dans le forum C
    Réponses: 4
    Dernier message: 03/04/2006, 01h00
  5. Réponses: 12
    Dernier message: 25/01/2006, 07h29

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