3339|8

82

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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,都没有成功,也是不报错,但发不了数据!
      
      高手们帮忙啊!
      紧急!
      
此帖出自WindowsCE论坛

最新回复

我也遇到类似问题。。。读没问题,就是写不行,也不报错。。。  详情 回复 发表于 2009-9-23 11:39
点赞 关注
 

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
补充:
   刚才说的那个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字节!
   求助!
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
debug看看
此帖出自WindowsCE论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
to: xqhrs232
     关键是没办法debug啊,驱动不是我写的,那人已走!
      代码都没得!
此帖出自WindowsCE论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

5
 
高手来看看啊,快疯了
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 3 楼 yolon3000 的回复:
to: xqhrs232
    关键是没办法debug啊,驱动不是我写的,那人已走!
      代码都没得!


比重写还麻烦。不知道里面是什么,没有经过验证,测试的DLL,现在拿来用,还是不要为好。
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
源代码都没有,只能自己重写
就算发现了问题,LZ你也修改不了啊
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
1. 不知你的 "驱动经测试可用" 是如何測試的??

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

Paul, Chao @ Techware
此帖出自WindowsCE论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

9
 
我也遇到类似问题。。。读没问题,就是写不行,也不报错。。。
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表