TDCU8004_SetDotStatus
怎么定义的,如果C#定义的TDCU8004_SetDotStatus和Delphi的不一致,就会出错。

解决方案 »

  1.   

    delph的例子是一个数组,所以我也定义了个数组。
      

  2.   

    TDCU8004_GetDotStatus
    TDCU8004_SetDotStatus为什么dllimport那里都是使用
    TDCU8004_DotStatusOne这两个结构定义一样吗
      

  3.   

    其实dll里有两个功能相似的函数
    Aukit_DCU8004SetDotStatus这个函数没响应
    Aukit_DCU8004_SetDotStatus这个函数报错。
    我在两个帖子里分别写了。delphi例子:  TDCU8004_GetDotStatus = packed array[0..37] of packed record
                                DotAddr   : byte;
                                DotStatus : byte;
                              end;var
      iSt: byte;
      rDotStatus:TDCU8004_GetDotStatus;
    begin
      if Aukit_DCU8004GetDotStatus(fCom.H,fDcuID,rDotStatus,fSleep) = 0 then
        begin
          cbGetDotSt.Checked := true;
          iSt := rDotStatus[4].DotStatus; 
          case iSt of
            3: rgGetDotSt.ItemIndex := 0; 
            4: rgGetDotSt.ItemIndex := 1;  
            0: rgGetDotSt.ItemIndex := 2; 
          end;
        end
      else
        cbGetDotSt.Checked := false;
    end;
      

  4.   

    http://blog.csdn.net/xuehuic/article/details/7682039
    尝试读取或写入受保护的内存。这通常指示其他内存已损坏的解决办法收集。
      

  5.   

    TDCU8004_DotStatusOne = packed record
                                DotAddr   : byte;
                                DotStatus : byte;
                              end;
      

  6.   

    设备为门禁读写器,串口。
    这是参照例子的实现,但无响应。
    delphi定义如下:
    function Aukit_DCU8004GetDotStatus
              (
              hCom:THandle;
              DcuID:integer;
              var rDotStatus:TDCU8004_GetDotStatus;
              rSleep:TSleep
              ): integer; stdcall;
                      external 'DCU8004.dll' name 'Aukit_DCU8004GetDotStatus';function Aukit_DCU8004SetDotStatus
              (
              hCom:THandle;
              DcuID:integer;
              const rDotStatus:TDCU8004_SetDotStatus;
              rSleep:TSleep
              ): integer; stdcall;
                      external 'DCU8004.dll' name 'Aukit_DCU8004SetDotStatus';
    C# dllimport如下:        //[DllImport("DCU8004.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
            //public static extern int Aukit_DCU8004GetDotStatus(IntPtr hCom, int DcuID, ref TDCU8004_DotStatusOne[] dotstatus, TSleep tSleep);        //[DllImport("DCU8004.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
            //public static extern int Aukit_DCU8004SetDotStatus(IntPtr hCom, int DcuID, TDCU8004_DotStatusOne[] dotstatus, TSleep tSleep);