【问题标题】:send SCSI commands using C#使用 C# 发送 SCSI 命令
【发布时间】:2010-06-27 14:06:06
【问题描述】:

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

【问题讨论】:

    标签: c# usb scsi


    【解决方案1】:

    你有几个选择

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

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

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

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

    【讨论】:

    • 克里斯,感谢您的快速回答。我的问题是我的应用程序不需要任何外部源。我认为这是使用 DLL 的问题。我开始使用 p/invoke 方法并使用 CreateFile 打开设备。但我不确定如何模拟 sg_io_hdr_t 结构。有什么建议吗?
    • @user168574,我从来没有专门使用过 sg_io_hdr,但我看到这个结构的唯一挑战是 void* dxferp 和 void* usr_ptr,但我希望你可以通过使用 IntPtr 来处理这个问题然后为结构分配一个足够大的缓冲区,并在需要时为 void* 分配额外的数据。这在评论中并不容易解释,但我几年前做了一篇文章,做了类似的事情来从另一个进程访问 ListViewItem,这可能会有所帮助。 taylorza.blogspot.com/2010/06/…,希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2012-07-02
    • 2012-12-12
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多