c写的dll,现在要在c#中调用,求在C#中怎样实现 以下为原型

1、OpenComm
函数原型: HANDLE OpenComm(int portNo);
功能说明: 打开串口。
返回值: 成功时返回串口句柄,失败时返回INVALID_HANDLE_VALUE(-1)

2、ReadTag
函数原型: BOOL ReadTag(HANDLE hCom, BYTE memBank, BYTE address, BYTE length, BYTE* data);
功能说明: 读标签内容。
返回值: 成功时返回TRUE(1),失败时返回FALSE(0)
参数: ●——hCom: 串口句柄
●——memBank: 要读的区域。各值的意义如下:
0x00——保留区
0x01——EPC区
0x02——TID区
0x03——用户区
●——address: 要读区域中的地址,取值为范围0-7。
●——length: 要读取的长度,取值范围是1到8(单位是Word,
1Word = 2Byte)。●——data: 要写入内容的地址(输出参数)
OpenComm的调用例程:
HANDLE hCom = OpenComm(1); // 打开串口1

ReadTag的调用例程:
BYTE data[2];
if(::ReadTag(hCom, 0x01, 0x03, 1, data)) // 读EPC区地址02开始的1个// 字(2字节)内容
{
CString strData;
strData.Format("%02X %02X ", data[0], data[1]);
AfxMessageBox("读EPC区地址02开始的1个字(2字节)内容成功! "+strData);
}

现在com口已经可以正常打开,但是读不了卡,求C#代码

修改一下你的数据类型转换试试,比如
BOOL ReadTag(HANDLE hCom, BYTE memBank, BYTE address, BYTE length, BYTE* data);

函数中的最后一个参数,引用的时候用string类型来代替。一般这种调用,数据类型转换很关键,要找对转换的关系。追问

现在主要问题是com口都不能打开,更别提读卡了

追答

额,不好意思,忘了这一点了,串口打不开的话估计不是你调用的问题了。不过你为什么两次打开呢?你第一次打开的时候没有获取句柄,接着又打开一遍,这第二遍应该是打开失败的,正确的做法应该是把hcom设置成全局变量,在你的load函数里面就获取,到读取的时候再用。但是不知道你的问题原因是不是这个,我觉得这里是不合理的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-23
这么定义
uint OpenComm(int portNo);

int ReadTag(uint hCom, ubyte memBank, ubyte address, ubyte length, ubyte[] data);
第2个回答  2012-07-23
求指教~~~
相似回答