C#如何实现USB口通信

jacklikeaccp 2011-04-25 09:24:44
最近在做一个项目,用到了串口通信和USB数据传输。我知道串口通信用的是serialport。但是我的另一个设备是用的USB口,用测试软件测试并不是用的COM口,不知道有没有从USB读取信息的类库。
...全文
1451 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiwai2011 2012-03-28
  • 打赏
  • 举报
回复
3楼可否留个联系方式,我的QQ:897156472,方便的时候加一下我。邮箱:ytao0410@163.com.有问题请教啊,急!急!急!
十分感谢!
-小蕾- 2011-04-25
  • 打赏
  • 举报
回复
嗯,你根据硬件厂商给你提供的API来,应该还有相应的文档。
给你看一段我做的读取写入USB接口的读卡器:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using BLL;
using System.Runtime.InteropServices;
using DevComponents.DotNetBar;

namespace PlatForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}

//c++函数强制声明
[DllImport("mi.dll", EntryPoint = "API_OpenComm")]
public static extern IntPtr API_OpenComm(int nCom, int nBaudrate);

[DllImport("mi.dll", EntryPoint = "API_CloseComm")]
public static extern bool API_CloseComm(IntPtr commHandle);

[DllImport("mi.dll", EntryPoint = "API_ControlBuzzer")]
public static extern int API_ControlBuzzer(IntPtr commHandle, int DeviceAddress, byte freq, byte duration, ref byte buffer);

[DllImport("mi.dll", EntryPoint = "API_MF_Read")]
public static extern int API_MF_Read(IntPtr commHandle, int DeviceAddress, byte mode, byte blk_add, byte num_blk, ref byte snr, ref byte buffer);

private void Form1_Load(object sender, EventArgs e)
{
Program.Port = API_OpenComm(4, 9600);
if (Program.Port.ToInt32() == 0)
{
labelControl2.Visible = false;
labelControl3.Visible = true;
buttonX1.Visible = true;
return;

}
byte pBuf = new byte();
Program.G_start = API_ControlBuzzer(Program.Port, 0, 3, 1, ref pBuf);
if (Program.G_start == 0)
{
labelControl2.Visible = true;
labelControl3.Visible = false;
buttonX1.Visible = false;
}
//启动时间轴

timer1.Interval = 1000;

timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
byte[] hex = new byte[16];
long ret = long.Parse("281474976710655");
hex = BitConverter.GetBytes(ret);
byte[] hex1 = new byte[16];
byte[] hex2 = new byte[16];
//Array.Clear(hex1, 0, 16);
byte[] data = new byte[16];

int idata = API_MF_Read(Program.Port, 0, 0, 10, 1, ref hex[0], ref data[0]);
//无卡接触时,循环等待
if (idata != 0)
{
return;
}
//取卡号
string s = BitConverter.ToInt64(data, 0).ToString();
member mem = new member();
//卡有效性验证
timer1.Stop();
if (mem.Exists(Convert.ToInt32(s)))
{

DialogResult result;
result = MessageBoxEx.Show("此卡存在数据,是否重写", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.No)
{

timer1.Start();
return;
}
}

Form3 form3 = new Form3();
if ((form3.ShowDialog() == DialogResult.OK))
{
timer1.Start();
return;
}
timer1.Start();
return;
}

private void buttonX1_Click(object sender, EventArgs e)
{
Form1_Load(sender, e);
}
}
}
viki117 2011-04-25
  • 打赏
  • 举报
回复
USB分很多种的,我做过HID设备的访问..反正是调用API...
SecretGarden 2011-04-25
  • 打赏
  • 举报
回复
没有。因为每个USB设备的应用层协议都不一样,没法做成类库。
不过你可以直接调用设备驱动程序访问USB设备,同样有一套规范。
lxz19880204 2011-04-25
  • 打赏
  • 举报
回复
厂商的API直接解决
不用自己写USB通信了

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧