从网上下载了一个VB.NET写的类库(MemoryMappedCache),用"VB.Net to C# Converter 1.51"转换到C#后出现了这么个问题。
未处理的“System.OverflowException”类型的异常出现在 mscorlib.dll 中。其他信息: 算术运算导致溢出。
跟踪出错的代码是:
intMapHandle = ApiHelper.CreateFileMapping(new IntPtr(0xFFFFFFFF), ref objSecurityAttributes, ApiHelper.PAGE_READWRITE, 0, System.Convert.ToInt32(objMemoryStream.Length + 4), strName);转换前VB的代码是:
intMapHandle = ApiHelper.CreateFileMapping(New IntPtr(&HFFFFFFFF), objSecurityAttributes, ApiHelper.PAGE_READWRITE, 0, CInt(objMemoryStream.Length + 4), strName)
请问该如何解决?

解决方案 »

  1.   

    跟踪到ApiHelper.CreateFileMapping的内部看看哪里出错了
      

  2.   

    可惜只能跟踪到CreateFileMapping,它调用了win32的api这是CreateFileMapping的C#代码。
    [DllImport("kernel32",EntryPoint="CreateFileMappingA", ExactSpelling=true, CharSet=CharSet.Ansi, SetLastError=true)]
    public static extern int CreateFileMapping(IntPtr hFile, ref SECURITY_ATTRIBUTES lpFileMappigAttributes, int flProtect, int dwMaximumSizeHigh, int dwMaximumSizeLow, string lpName);
      

  3.   

    Have a try
    intMapHandle = ApiHelper.CreateFileMapping(IntPtr.Zero, ref objSecurityAttributes, ApiHelper.PAGE_READWRITE, 0, System.Convert.ToInt32(objMemoryStream.Length + 4), strName);
      

  4.   

    主要是在vb和c#定义IntPtr为空的时候是有区别
      

  5.   

    嗯,我单独把每一个参数拿到C#来测试,马上就发现new IntPtr(0xFFFFFFFF)是不对的,然后找SDK发现有IntPtr.Zero的用法,抱着常识的心理试了一下没想到可以。看了你的回复后态度就更坚定了。谢谢!