Probl�me de passage de param�tres-tableau de structures � une fonction DLL
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:
1 2 3 4 5
| //code non managé
typedef struct {
int intA;
int intB;
} MASTRUCT; |
Code:
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:
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:
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