SetFilePointer奇怪的问题

时间:2018-05-16 22:41:10

标签: c#

我试图从物理驱动器读取扇区。但设置文件指针在一段时间后会出现一些奇怪的错误

[DllImport("kernel32.dll", EntryPoint = "SetFilePointer", CallingConvention = CallingConvention.StdCall)]
        static extern uint SetFilePointer(
              [In] IntPtr hFile,
              [In] int lDistanceToMove,
              [In,Out]  int lpDistanceToMoveHigh,
              [In] EMoveMethod dwMoveMethod);

public void SetFilePointer(LARGE_INTEGER li)
        {


            SetFilePointer((IntPtr)handle, li.LowPart, li.HighPart, EMoveMethod.Begin);

        }       
//values
HighPart    381 int
LowPart         -1323466752 int

如果将highPart传递给零,则其工作。在C版本,它能够下载没有任何问题。但是在c#版本中,当高值不为零时,它会产生异常。

  

附加信息:尝试读取或写入受保护的内存。   这通常表明其他内存已损坏。

你可以建议任何更正吗

更新已解决 正如@mjwills建议我必须将签名更改为

    [DllImport("kernel32.dll", EntryPoint = "SetFilePointer")]
            static extern uint SetFilePointer(
          [In] Microsoft.Win32.SafeHandles.SafeFileHandle hFile,
          [In] int lDistanceToMove,
          [In, Out] ref int lpDistanceToMoveHigh,
          [In] EMoveMethod dwMoveMethod);

            public void SetFilePointer(LARGE_INTEGER li)
            {


                SetFilePointer(shandle, li.LowPart, ref li.HighPart, EMoveMethod.Begin);

            }

0 个答案:

没有答案