我已代碼C#編寫的一個上的Windows7和VS2010,使用.net 3.5 32位,它是乳寧沒有任何問題,現在我將它轉換到64位使用.NET 4.0,但我的代碼調用CloseHandle時出現錯誤。System.Runtime.InteropServices.SEHException(0X80004005):外部部件發生異常
錯誤 - CloseHandle
System.Runtime.InteropServices.SEHException(0x80004005):外部組件已引發異常。
unsafe
{
fixed (byte* p = readBuffer)
{
IntPtr intPtr = (IntPtr)p;
this.ReadFile(ref sourceFile, (ulong)buffer_size, intPtr, ref nNumBytesRead);
if (intPtr != IntPtr.Zero)
{
try
{
FunctionSqudf.CloseHandle(intPtr);
}
catch (Exception ex)
{
Hardware.LogHardware.Error("CloseHandle", ex);
}
}
}
}
[SecuritySafeCritical]
[DllImport("kernel32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool CloseHandle(IntPtr hObject);
任何幫助表示讚賞。
ReadFile在做什麼? –
你正在用一個緩衝區指針調用CloseHandle(),而不是一個句柄。這段代碼之前無法正常工作,顯然現在在64位模式下運行時會提醒您。 –
彼得裏奇的ReadFile將從媒體[SecuritySafeCritical] [的DllImport(DllPath的,字符集= CharSet.Ansi,CallingConvention = CallingConvention.StdCall,ThrowOnUnmappableChar =真)] 內部靜態外部UdfResult ReadFile的( REF StructSqudf.SQFile讀取文件部分openFsObject,\t \t [IN] ULONG numBytesToBeRead, IntPtr的緩衝器,\t \t REF ULONG numBytesRead); – Khayralla