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.