2009-02-09 8 views
0

C'est difficile pour moi.Comment importer const int * const buffer [] en C#?

const int * const buffer[] 

Actuellement, je l'ai traduit comme suit:

byte[] buffer 

Le problème est que je reçois des exceptions AccessViolation, lorsque DLL appelle la fonction avec ce paramètre est d'utiliser au-dessus.

Merci pour votre aide.

Répondre

3

Avec deuxconst C'est sûrement une indication que vous n'êtes pas autorisé à le changer :-). Mais, sérieusement, un de ces états que le pointeur ne devrait pas changer, l'autre indique que les données pointées par le pointeur ne devraient pas changer.

C'est pourquoi vous obtenez la violation d'accès.

Ce que vous devrez faire est copier, pas simplement cast, les données à un autre tampon qui est un peu moins const. Astuce: Buffer.BlockCopy est le chemin à parcourir.

1

N'est pas sizeof(int) > sizeof(byte)? Si oui, alors vous aurez sûrement des problèmes.

+0

Ils peuvent rendre le tableau d'octets quatre fois plus grand. C'est ce que je présume. – paxdiablo

1

Les modificateurs const n'affectent pas la signature PInvoke, bien qu'ils puissent affecter la façon dont vous gérez les données. Étant donné que le paramètre de la mémoire tampon est un tableau de pointeurs vers des nombres entiers dont la traduction correcte serait:

IntPtr[] buffer; 
0

Edit: il fonctionne maintenant, sans exception de AccessViolation, mais je ne sais pas comment récupérer correctement les données de tableau comme cela.

Exemple de fichier utilise ce type d'accès:

buffer[0][i] 
buffer[1][i] 

mais j'ai seulement 1 pointeur dans un tampon []. Ce pointeur est un pointeur sur un tableau à deux dimensions? Comment le marier alors à .NET? Merci!

+0

S'il vous plaît modifier votre question originale avec les informations mises à jour. Ce n'est pas une réponse. :) –

Questions connexes