Bonjour,

Ca fait d�j� un certain temps que je gal�re la-dessus:

J'ai un probl�me sur un bout de code. J'ai une structure C++ et une structure C++/CLI correspondante:

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
//code non managé
typedef struct { 
	int intA; 
	int intB; 
	} MASTRUCT;
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
//code managé
[StructLayout(LayoutKind::Sequential)] 
public  ref struct MASTRUCTCLI
	public:
	int intA; 
	int intB; 
	};
et je veux appeler une fonction d'une DLL pour faire une op�ration avec un array rempli d'objets de cette structure, voici la fonction DLL:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
//Code non managé
extern "C" __declspec(dllexport) void Cpp(MASTRUCT *t[], int longueur) 
	 { 
	 int i ;	
	 for(i=0; i < longueur - 1 ; i++) 
			 { 
			 t[i]->intA += 10;
			 t[i]->intB += 10;
			 }
pour passer un array en param�tre je sais que je dois bien le marshaliser en alouant un bout non manag� de memoire et passer l'adresse en IntPtr ce que j'ai bien fait etc.

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
//code managé
[DllImport("marshallingDLL.dll")] extern "C"  void Cpp( IntPtr p  , int longueur);
...
main(){
array<MASTRUCTCLI^> ^myArray = gcnew array<MASTRUCTCLI^>(10);
 
//remplissage du tableau..
 
int sizeBase = Marshal::SizeOf(myArray[0])
for (int i =0;i< 2;i++)
		{
		temp = IntPtr(p.ToInt32()+ i*sizeBase);
		Marshal::StructureToPtr(myArray[i],temp,false);
		}
 
Cpp(p, longueur);
Le code compile mais il me donne une exception SystemReferenceNULL, comme quoi il n'y a rien ds l'addresse que j'ai pass�e en param�tre � ma fonction DLL. Et en plus, pour essayer de comprendre cette exception, apr�s la boucle de marshalisation j'ai mis une autre de" demarshalisation " qui remettait le contenu des addresses en structure (Marshal:: PtrToStructure(temp, StructureTemp)) et cette boucle me renvoie toutes les donn�es parfaitement plac�es et tout.

Donc je ne comprends pas d'ou cette exception vient. Si quelqu'un pouvait m'aider j'en serais tr�s reconnaissant.

Merci d'avance