2009-02-10 5 views
1

I marshalé correctement à:récupérer les données depuis le tampon const int * const []

IntPtr buffer 

tampon est pointeur vers un tableau de 2 pointeurs vers des tableaux avec des données respectives. Le problème est que je ne reçois pas de données précises, comme s'il y avait quelque chose qui manquait dans les données récupérées (par exemple, des échantillons manquants dans le flux de données audio).

// length is parameter 
IntPtr[] temp = new IntPtr[2]; 
Marshal.Copy(buffer, temp, 0, 2); 
bufferedData = new byte[bufferSize]; 
byte[] a = new byte[length]; 
byte[] b = new byte[length]; 
Marshal.Copy(temp[0], a, 0, length); 
Marshal.Copy(temp[1], b, 0, length); 

edit: désolé j'ai oublié d'écrire ces 2 lignes :)

Répondre

0

Oui, vous devez copier les tampons d'octets trop :)

Mise à jour: Cela semble mieux!

0

Si le tampon est un pointeur vers un tableau, vous devez lire le pointeur une fois de plus.

efficacement:

buffer = Marshal.ReadIntPtr(buffer); 
+0

bien, merci pour la réponse, mais c'était vraiment hors. J'obtiens des données réelles, mais c'est comme s'il y en avait qui manquaient. L'adresse du début d'un tableau ne m'aide pas beaucoup avec le marshalling mais le pointeur le fait (comme montré dans mon code ci-dessus). –

0

Je ne sais rien au sujet de C# et donc cela est une estimation complète, mais - vous semblez copier ints à octets, est « longueur » le compte en ints, ou le compte en octets? Pourrait-il y avoir une confusion là-bas? Cela peut parfois être un problème dans le vieux C++.

+0

Eh bien, le problème est que tout est en octets (même longueur). La seule chose que je peux penser, c'est que la DLL m'envoie de mauvaises données (ou pas assez de données) –

1

Je l'ai finalement résolu. Je ne lisais pas le tampon d'entrée complet par erreur. Merci pour votre aide!

Questions connexes