wince writefile 总是发送不了数据,但不报错!

_DavidWang_
博客专家认证
2009-03-31 09:41:17
问题如下:
我现在接手别人的工作,驱动别人是用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,都没有成功,也是不报错,但发不了数据!

高手们帮忙啊!
紧急!
...全文
243 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
daego 2009-09-23
我也遇到类似问题。。。读没问题,就是写不行,也不报错。。。
  • 打赏
  • 举报
回复
gooogleman 2009-03-31
[Quote=引用 3 楼 yolon3000 的回复:]
to: xqhrs232
关键是没办法debug啊,驱动不是我写的,那人已走!
代码都没得!
[/Quote]

比重写还麻烦。不知道里面是什么,没有经过验证,测试的DLL,现在拿来用,还是不要为好。
  • 打赏
  • 举报
回复
_DavidWang_ 2009-03-31
高手来看看啊,快疯了
  • 打赏
  • 举报
回复
_DavidWang_ 2009-03-31
to: xqhrs232
关键是没办法debug啊,驱动不是我写的,那人已走!
代码都没得!
  • 打赏
  • 举报
回复
xqhrs232 2009-03-31
debug看看
  • 打赏
  • 举报
回复
_DavidWang_ 2009-03-31
补充:
刚才说的那个C#定义的结构体长度是:16
后来考虑到ULONG在evc与VS2005里的字节可能不一样,如是改成:
[StructLayout(LayoutKind.Sequential)]
unsafe public struct SetInfo
{
public UInt32 address;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public byte[] data;
}
这个长度才是:8
但问题依旧,发送依然是0字节!
求助!
  • 打赏
  • 举报
回复
paul_chao 2009-03-31
1. 不知你的 "驱动经测试可用" 是如何測試的??

2. C# 不會用, 不知你的 Setinfo.data = new Byte[4]; 與 C 中的 BYTE data[4]; 是否完全一樣, 建議你先用 evc 寫 native code 來做測試, 這樣不同程式語言之間的差異才可消除, 先測到你的 dll 能正確 access 了, 再來移植到 C#, 可能可以少走一些冤枉路.

Paul, Chao @ Techware
  • 打赏
  • 举报
回复
91program 2009-03-31
源代码都没有,只能自己重写
就算发现了问题,LZ你也修改不了啊
  • 打赏
  • 举报
回复
发帖
嵌入开发(WinCE)

1.9w+

社区成员

硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
帖子事件
创建了帖子
2009-03-31 09:41
社区公告
暂无公告