簡體   English   中英

CloseHandle調用上的無效句柄異常?

[英]Invalid handle exception on CloseHandle call?

在我的應用程序中,我打開了一個共享內存的句柄,該句柄是我讀取/寫入的。 我像這樣打開手柄:

//Map the shared memory
     d_to_mbx_mem_arr[idx] = reinterpret_cast<Byte*>(MapViewOfFile(to_mem_h,    // handle to map object
                                                       FILE_MAP_ALL_ACCESS, // read/write permission
                                                       0,
                                                       0,
                                                       MAILBOX_SIZE_e));

此處設置的變量是Byte *的數組(Byte是無符號字符的別名),因此我進行了重新解釋轉換,因此可以像標准Byte指針一樣使用句柄。

稍后,我嘗試通過以下方式釋放手柄:

CloseHandle(d_to_mbx_mem_arr[p_tool_id]);
d_to_mbx_mem_arr[p_tool_id] = NULL;

由於在CloseHandle之后將值設置為NULL,並且調用此方法的代碼僅是單線程的,我知道我只調用了一次。 但是,當我調用它時,會收到以下警告:

“ FMLib_Comm_Layer.exe中0x7c90e4ff(ntdll.dll)處的首次機會異常:0xC0000008:指定了無效的句柄。”

當我為警告而中斷時,我看到它試圖關閉的句柄的值為“ 0x01c90000”,對於共享的mem指針,這對我來說似乎很合理。 有人看到此實現有問題嗎?還是我應該假設我在其他地方搞砸了?

您需要在to_mem_h上調用CloseHandle() ,而不是在MapViewOfFile()的返回值上調用(請參見此處使用MapViewOfFile()示例-該示例正在對MapViewOfFile()的返回值調用UnmapViewOfFile() MapViewOfFile()並正在調用CloseHandle()MapViewOfFile()的第一個參數上

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM