Mémoire managée et non managée

bh2 Messages postés 1 Date d'inscription lundi 7 juillet 2003 Statut Membre Dernière intervention 12 décembre 2005 - 12 déc. 2005 à 15:48
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 15 déc. 2005 à 20:46
Bonjour,

Je migre une application de VB6.0 vers VB.Net. Cette application embarque un OCX écrit en C++. Dans cet OCX, j'ai une méthode qui prend un tableau d'entiers en argument.

long MaClasseCtrl::SetPalette(long NbC, long FAR* Palette)
{
// Je parcours mon tableau
for (long i=0; i<NbC;i++)
{
// mon opération ...

Palette++; // Je passe à l'emplacement mémoire suivant
}
}

Au niveau de mon appli VB6.0, j'appelais cette méthode en lui passant le premier élément du tableau (et tout allait bien) :

Dim Nb As Integer
Dim MonTableau(5) as Integer
' Je rempli mon tableau ...
Nb = 5
MonOCX.SetPalette 5,MonTableau(0)

Maintenant, avec le même code d'appel en VB.Net, et en mode debug dans Visual C++, j'ai pu observer qu'il récupère bien la première adresse mémoire, mais quand je passe à la suivante, il fait n'importe quoi.

De ce que j'ai pu lire, il faut écrire un wrapper qui marshale mon tableau managé en tableau non managé ; mais je ne vois pas très bien par où commencer.

Merci d'avance pour votre aide

Bruno

1 réponse

ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
15 déc. 2005 à 20:46
salut,



la doc MSDN donne :

Declare Function SetPalette Lib "" (NbC As Integer, _
<MarshalAs(UnmanagedType.LPArray, SizeParamIndex:=1)> _
Palette() As Integer)



ShareVB
0
Rejoignez-nous