Le passage de pointeurs de code non managé
J'ai un projet C# que les importations d'une dll C, la dll a cette fonction:
int primary_read_serial(int handle, int *return_code, int *serial, int length);
Je veux avoir accès à la série de paramètres. En fait, j'ai eu le retour d'un personnage de la série de paramètres, mais je ne suis pas vraiment sûr de ce que je fais, je voudrais comprendre ce qui se passe, et bien sûr qu'il fonctionne.
Donc, je suis très sûr que la dll est en cours d'accès, d'autres fonctions sans pointeurs, beau travail. Comment gérer les pointeurs? Dois-je le maréchal? J'ai peut-être d'avoir un lieu fixe pour mettre les données?
Une explication serait génial.
Merci!
Richard
OriginalL'auteur Richard | 2009-05-07
Vous devez vous connecter pour publier un commentaire.
Vous aurez à utiliser un IntPtr et le Maréchal qui IntPtr dans quelque structure C# vous voulez le placer. Dans votre cas, vous devrez maréchal à un int[].
Ceci est fait en plusieurs étapes:
Que le code devrait vous donner une idée:
N'oubliez pas le try-finally, ou vous risque de fuite non managé poignée.
try-catch ou essayez-enfin?
essayez-enfin, merci pour le tuyau. Fixe.
OriginalL'auteur Coincoin
Si je comprends ce que vous essayez de le faire, cela devrait fonctionner pour vous.
JaredPar vous donne un moyen facile de le faire cependant, ce qui est juste pour changer votre déclaration de fonction de sorte que le C# n'sur la formation pour vous dans le fond.
J'espère que cela vous donne une idée de ce qui se passe à un niveau légèrement inférieur, de toute façon.
OriginalL'auteur Noldorin
Lors de l'écriture de votre P/invoke déclaration de cette fonction, essayez d'utiliser le mot clé ref pour le pointeur de paramètres comme ceci:
Je ne suis pas sûr si vous devez spécifier les paramètres " nom en C#. Et n'oubliez pas, lorsque vous appelez cette méthode, vous devez utiliser les ref dans les arguments que vous êtes de passage par référence.
OriginalL'auteur Anzurio