Bonjour,

J'ai besoin d'adapter un morceau de code interfa�ant un driver, �crit sous C++, dans le but de faire le fonctionner sous C#. Maintenant, je suis capable de le compiler et le faire travailler sans probl�me sous C++, mais je ne vois pas comment le faire avec C#.

Bref, la difficult� se trouve en le passe d'une struct comme un param�tre de une fonction C#.

La struct (qui elle-m�me contient une autre struct) ressemble le suivant:

Sous C++
=======

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
struct {    
	short s11;    
	short s12;    
	short s13;    
	short s14;    
	struct2 sa[20]    
} struct1    
 
struct{    
	long l21;    
	long l22;    
	long l23;    
	long l24;    
	short s21;    
	short s22;    
	short s23;    
	short s24;	    
} struct2
Sous C# (En adaptant le type long au type int, pour le faire occuper 4 bytes)
=======

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
struct {      
	short s11;      
	short s12;      
	short s13;      
	short s14;      
	struct2 sa[20]      
} struct1      
 
struct{      
	int l21;  		// long sous C++ --> int sous C# (4 bytes)    
	int l22;      
	int l23;      
	int l24;      
	short s21;      
	short s22;      
	short s23;      
	short s24;	      
} struct2
et le fonction est pareille � la suivante:

Sous C++
=======

Declaration...
-----------------
Code : S�lectionner tout - Visualiser dans une fen�tre � part
int function1 (struct1* pStruct1);
Appel...
--------
Code : S�lectionner tout - Visualiser dans une fen�tre � part
int1 = function1 (&pStruct1);		// Une fois la pStruct1 remplie avec les données
Sous C# (Les probl�mes arrivent):
========================

Declaration...
-----------------
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
[DllImport(_dllLocation)]            
public static extern int function1(    
            struct1 pStruct1,    
);
Appel...
-------
Code : S�lectionner tout - Visualiser dans une fen�tre � part
int1 = StaticClass.function1(pStruct1);	// Une fois la pStruct1 remplie avec les données
***********************

J'ai essay� des differentes possibilit�s, mais sans aucun r�ponse satisfaisante

1) En d�clarant...
Avant la struct...
Code : S�lectionner tout - Visualiser dans une fen�tre � part
[StructLayout(LayoutKind.Sequential, Pack=1, Size=488)] / Size=24)]
Entre les champs de la struct...
Code : S�lectionner tout - Visualiser dans une fen�tre � part
[FieldOffset(0)] / [FieldOffset(2)] / ...
Je re�ois une erreur
Code : S�lectionner tout - Visualiser dans une fen�tre � part
HRESULT "(HRESULT Exception: 0x80070057 (E_INVALIDARG))"
2) En d�clarant...
Avant le struct array...
Code : S�lectionner tout - Visualiser dans une fen�tre � part
[MarshalAs(UnmanagedType.SafeArray,SizeConst=20)
Je re�ois la m�me erreur

3) En laissant pStruct d�clar�e seulement, mais sans la remplir avec d'information, la fonction me laisse l'appeler, mais je n'observe pas de fonctionnement.

Je serais tr�s remerci� de pouvoir recevoir n'importe quelle aide / recommandation, car je me trouve maintenant bloqu� et je ne sais pas comment suivre.

Merci de vos r�ponses.