首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#怎么实现USB口通信

2012-03-31 
C#如何实现USB口通信最近在做一个项目,用到了串口通信和USB数据传输。我知道串口通信用的是serialport。但是

C#如何实现USB口通信
最近在做一个项目,用到了串口通信和USB数据传输。我知道串口通信用的是serialport。但是我的另一个设备是用的USB口,用测试软件测试并不是用的COM口,不知道有没有从USB读取信息的类库。

[解决办法]
嗯,你根据硬件厂商给你提供的API来,应该还有相应的文档。
给你看一段我做的读取写入USB接口的读卡器:

C# code
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);        }    }}
[解决办法]
厂商的API直接解决
不用自己写USB通信了

热点排行