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++
=======
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)
=======
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...
-----------------
int function1 (struct1* pStruct1);
Appel...
--------
int1 = function1 (&pStruct1); // Une fois la pStruct1 remplie avec les données
Sous C# (Les probl�mes arrivent):
========================
Declaration...
-----------------
1 2 3 4
| [DllImport(_dllLocation)]
public static extern int function1(
struct1 pStruct1,
); |
Appel...
-------
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...
[StructLayout(LayoutKind.Sequential, Pack=1, Size=488)] / Size=24)]
Entre les champs de la struct...
[FieldOffset(0)] / [FieldOffset(2)] / ...
Je re�ois une erreur
HRESULT "(HRESULT Exception: 0x80070057 (E_INVALIDARG))"
2) En d�clarant...
Avant le struct array...
[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.
Partager