示例#1
0
        public byte[] DataTransFromBufferOneLine(SapBuffer buff)
        {
            byte[]   output     = new byte[buff.Width];
            GCHandle outputAddr = GCHandle.Alloc(output, GCHandleType.Pinned); // output 의 GC주소 만듬
            IntPtr   pointer    = outputAddr.AddrOfPinnedObject();
            //buff.ReadRect(0, 0, buff.Width, 2, pointer);     // 이걸로 안하면 무조건 중간에 멈춘다.
            int readnum = 0;

            buff.ReadLine(0, 0, 12287, 0, pointer, out readnum);
            Marshal.Copy(pointer, output, 0, output.Length); // Pointer에서 가리키는 첫번쨰 메모리 주소에서부터 Length 만큼 카피를 한다.
            outputAddr.Free();
            return(output);
        }
示例#2
0
 public override bool?BuffGetLine()
 {
     try
     {
         BuffData = new byte [Buffers.Width];
         GCHandle outputAddr = GCHandle.Alloc(BuffData, GCHandleType.Pinned);
         IntPtr   pointer    = outputAddr.AddrOfPinnedObject();
         int      readnum    = 0;
         Buffers.ReadLine(0, 0, Buffers.Width - 1, 0, pointer, out readnum);
         Marshal.Copy(pointer, BuffData, 0, BuffData.Length);
         outputAddr.Free();
         return(true);
     }
     catch (Exception ex)
     {
         BuffData = null;
         return(null);
     }
 }