积极答复者
【救助】c#调用vc dll时,函数参数为结构体指针,不知道该怎么转换?求指教!!

问题
-
调用vc dll时,有这样一个函数
DrfIsoMultiTagIdentify
函数原型:DrfIsoMultiTagIdentify(HANDLE hCom, unsigned int * Count,TagIds *value, unsigned char ReaderAddr)
功能说明:ISO18000-6B多标签ID识别
输入参数:
l hCom-串口句柄
l Count—识别到的标签数
l value—这是一个TagIds型结构体
typedef struct
{
unsigned char TagType;
unsigned char AntNum;
unsigned char Ids[12];
}TagIds;
TagType—返回标签的类型
AntNum—返回天线号
Ids—返回读到的标签号,ISO18000-6B取前面8位
l ReaderAddr—读写器的地址,默认值为255,在485网络中应用,相当于tcp/ip的网络地址
我在c#里面这样做的
结构体申明
IntPtr c_hcom=new IntPtr();
函数的调用及功能测试代码:[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] public struct TagIds { [MarshalAs(UnmanagedType.U1)] Byte TagType; [MarshalAs(UnmanagedType.U1)] Byte AntNum; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] Byte[] ids; };
这样编译运行后的结果temp不等于0,按照sdk里的说法,是函数调用不成功,请问各位大牛,这里应该怎么弄?不甚感激[DllImport("DrfApiV10.dll", EntryPoint = "DrfIsoMultiTagIdentify", CharSet = CharSet.Ansi)] //ISO18000-6B多标签ID识别 public static extern int DrfIsoMultiTagIdentify(IntPtr hCom, ref UInt32 Count, TagIds[] value, Byte ReaderAddr); private void button4_Click(object sender, EventArgs e) { UInt32 Count=0; TagIds[] values=new TagIds[20]; for (int i = 0; i <values.Length; i++) { values = new TagIds(); } int temp = DrfIsoMultiTagIdentify(c_hcom, ref Count, values, 255); String tempstr =string.Empty; if (temp != 0) { MessageBox.Show(temp.ToString()); } else { for (int i = 0; i < Count; i++) { for (int j = 0; j < 8; j++) { string s = String.Format("%02x", values.Ids); tempstr += s; } } } }
- 已移动 Sheng Jiang 蒋晟Moderator 2010年12月11日 2:00 (发件人:Visual C#)