2010-06-27 8 views
0

Je contrôle mon périphérique USB auto-conçu en utilisant l'interface SCSI avec C en ouvrant une poignée de fichier, ioctl et en utilisant la structure sg_io_hdr_t. Je dois concevoir une interface graphique, et je devrais le faire avec C#. Je ne suis pas trop familier avec C#. U pourrait suggérer une façon de le faire avec C#envoyer des commandes SCSI en utilisant C#

Répondre

0

Vous avez quelques options

1- Utilisez p/invoke (plate-forme Invoke) interopérabilité. En utilisant cela, vous pouvez faire l'une des deux choses. Utilisez p/invoke pour appeler l'API Win32 à partir de .NET, vous pouvez également écrire un dll C qui exporte une interface simplifiée pour contrôler le périphérique, puis l'interopérer avec cette DLL.

2- Vous pouvez utiliser managed C++ et créer une bibliothèque que vous pouvez appeler à partir de C#.

3- Vous pouvez envelopper votre code C en tant qu'objet COM et utiliser COM interop depuis C#.

Puisque vous avez probablement un code C de travail, je pense que le plus simple serait de créer une DLL qui exporte un facile d'invoquer l'interface, puis utiliser P/Invoke pour appeler que de C#

+0

Chris, merci pour votre rapide répondre. Mon problème est que mon application ne devrait pas nécessiter de source externe. Je pense que c'est un problème pour utiliser une DLL. J'ai commencé à utiliser la méthode p/invoke et j'ai ouvert le périphérique avec CreateFile. Mais je ne suis pas sûr comment je peux simuler la structure de sg_io_hdr_t. Toute suggestion? – user168574

+0

@ user168574, je n'ai jamais travaillé spécifiquement avec sg_io_hdr, mais le seul défi que je vois avec cette structure est le void * dxferp et le void * usr_ptr, mais je pense que vous pourriez gérer ceci en utilisant un IntPtr et en allouant un tampon assez grand pour la structure et les données supplémentaires pour l'annulation * si nécessaire. Ce n'est pas facile à expliquer dans un commentaire, mais j'ai fait un post il ya quelques années qui a fait quelque chose de similaire pour accéder à ListViewItem d'un autre processus, cela pourrait aider. http://taylorza.blogspot.com/2010/06/crossing-process-boundary-with-net.html, espérons que cela aide. –

Questions connexes