C# 使用C发送SCSI命令#

C# 使用C发送SCSI命令#,c#,usb,scsi,C#,Usb,Scsi,我通过打开一个文件句柄、ioctl并使用sg_io_hdr_t结构,使用SCSI接口和C来控制我自己设计的USB设备。我必须设计一个GUI,我应该用C#来设计。我对C不太熟悉。你能建议一种用C#实现这一点的方法吗?你有几个选择 1-使用(平台调用)互操作性。使用这个你可以做两件事中的一件。使用p/invoke从.NET调用Win32 api,或者您可以编写一个C dll,导出一个简化的接口来控制设备,然后与此dll进行互操作 2-您可以使用,并创建一个可以从C#调用的库 3-您可以将C代码包装为

我通过打开一个文件句柄、ioctl并使用sg_io_hdr_t结构,使用SCSI接口和C来控制我自己设计的USB设备。我必须设计一个GUI,我应该用C#来设计。我对C不太熟悉。你能建议一种用C#

实现这一点的方法吗?你有几个选择

1-使用(平台调用)互操作性。使用这个你可以做两件事中的一件。使用p/invoke从.NET调用Win32 api,或者您可以编写一个C dll,导出一个简化的接口来控制设备,然后与此dll进行互操作

2-您可以使用,并创建一个可以从C#调用的库

3-您可以将C代码包装为COM对象,并从C#使用COM互操作


由于您可能有一些工作的C代码,我认为最简单的方法是创建一个DLL,导出一个易于调用的接口,然后使用p/invoke从C#

Chris调用它,谢谢您的快速回答。我的问题是我的应用程序不需要任何外部源。我认为这是一个使用DLL的问题。我开始使用p/invoke方法,并用CreateFile打开了设备。但我不确定如何模拟sg_io_hdr_t结构。有什么建议吗?@user168574,我从来没有专门使用过sg_io_hdr,但是我看到这个结构的唯一挑战是void*dxferp和void*usr_ptr,但是我希望您可以通过使用IntPtr来处理这个问题,然后为结构分配足够大的缓冲区,并在需要时为void*分配额外的数据。这不容易在评论中解释,但我几年前写过一篇帖子,做了一些类似于从另一个进程访问ListViewItem的事情,这可能会有所帮助,希望这有帮助。