|
wince writefile 总是发送不了数据,但不报错!
[复制链接]
问题如下:
我现在接手别人的工作,驱动别人是用evc4.2写dll,驱动经测试可用。
我现在用C#开发应用程序。
现在的问题是,驱动writefile第二个参数他传的是一个结构体引用。里面有设备的基地址。
evc的结构体如下:
struct SetInfo
{
ULONG address;
BYTE data[4];
}
在evc里的调用
writefile(handle,&setinfo,sizeof(setinfo),&nWriten,NULL)
没有问题,
现在我的问题是,我要写数据,我在C#里定义的结构体如下:
[StructLayout(LayoutKind.Sequential)]
unsafe public struct SetInfo
{
public ulong address;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public byte[] data;
}
在C#里申明的writefile如下:
[DllImport("coredll.dll")]
unsafe public static extern bool WriteFile(
System.IntPtr h_comm, // file handle
ref SetInfo text,
UInt32 length,
ref UInt32 length2,
UInt32 overlap
);
测试代码如下:
unsafe
{
UInt32 HasWriten = 1;
common.IOFile.SetInfo Setinfo = new IOtest.common.IOFile.SetInfo();
Setinfo.address = 0x200;
Setinfo.data = new Byte[4];
Setinfo.data[0] = 0x3;
Setinfo.data[1] = 0x4;
Setinfo.data[2] = 0x5;
Setinfo.data[3] = 0x6;
if (common.IOFile.WriteFile(HandlePtr, ref Setinfo, (UInt32)Marshal.SizeOf(Setinfo), ref HasWriten, 0))
{
this.lbState.Text = HasWriten + " bytes data have writen to the IOBoard ! structSize: " + Marshal.SizeOf(Setinfo);
}
else
{
this.lbState.Text = "Some Error ocurred ,can not write to the IOBoard ! LastErrorCode:" + common.IOFile.GetLastError();
}
}
结果是编译,运行都没有问题,显示:0 bytes data have writen to the IOBoard ! structSize:8
总也发不了数据!
我估计是结构体的问题,但开始也用了Marshal.StructureToPtr,都没有成功,也是不报错,但发不了数据!
高手们帮忙啊!
紧急!
|
|