最近在做一个项目,有用到明华的读卡器,要用明华读卡器来读卡~!
先初始化设备
调用rf_init 返回值是0,表示成功的!
之后寻卡
rf_Card()一直都是失败,返回值不是0我调用过程是这样的 
动态链接库中的函数原型是:
int rf_card(int icdev,unsigned char _Mode,unsigned long *_Snr);
参 数:icdev:通讯设备标识符
       _Mode:寻卡模式mode_card
       _Snr:返回的卡序列号我用C#调用改写成下面形式
[DllImport("mwrf32.dll")]
public static extern int rf_card(int icdev, byte _Mode, ref uint _Snr);但调用之后返回值一直不是0,说明寻卡不成功,请问我这个改写有什么不对的吗?是不是哪里类型搞错了!!!

解决方案 »

  1.   

    如果参数是传进的话,用string是可以的,如果是传出的话,用StringBuilder。    
      至于const  int*,用"ref  int"来替换。 
    int===> IntPtr  
    是不是类型错误了??
      

  2.   

    [DllImport("mwrf32.dll")]
    public static extern int rf_card(int icdev, byte _Mode, out uint _Snr);
    试试.
      

  3.   

    int===> IntPtr 
    我第一个参数用IntPtr试过了,也不行~!!
    [DllImport("mwrf32.dll")] 
    public static extern int rf_card(IntPrt icdev, byte _Mode, ref uint _Snr); 
      

  4.   

    我加了unsafe,把编译模式设置成允许不安全代码
    但还是不行的
      

  5.   

    我觉得这应该可以的呀, 不知道你Dll动态库格式会不会有问题.  最近我也在弄这个, 如果你不介意的话, 把动态库及相关的文件发到[email protected], 我可以帮你测下.
      

  6.   

    不是有DEMO吗?        [DllImport("mwpd_32.dll", EntryPoint = "rf_card", SetLastError = true,
                 CharSet = CharSet.Auto, ExactSpelling = false,
                 CallingConvention = CallingConvention.StdCall)]
            //说明:    向指定地址写数据
            //调用:    icdev:    通讯设备标识符  mode:   寻卡模式
            //          _Snr:      返回序列号 _Snrlen: 序列号长度
            //返回:     <0   错误 =0  正确
            public static extern Int16 rf_card(int icdev, Int16 mode, [MarshalAs(UnmanagedType.LPArray)]byte[] _Snr, [MarshalAs(UnmanagedType.LPArray)]byte[] _Snrlen);
      

  7.   

    你和厂家联系和他们要DEMO就行了。