2012-02-08 273 views
0

時候會有AccessViolationException當我傳遞一個struct一些PInvoke方法,我會收到錯誤爲什麼使用結構,而不是

未處理的異常:System.AccessViolationException:嘗試讀取或寫入 保護記憶。這通常表明其他內存已損壞。

當我使用類,那麼它是確定的。

我想知道背後的任何原因?

+4

完全取決於有問題的代碼。 – SLaks 2012-02-08 15:29:46

+0

如果您將結構傳遞給按值傳遞參數,則其值將被複制。如果你傳遞一個類,那麼這個類的引用就會被複制。爲了能夠給你一個正確的答案,我們需要知道你所處的情況。 – haiyyu 2012-02-08 15:35:54

+0

你想要使用哪種方法進行PInvoke以及你的結構定義是什麼樣的? – 2012-02-08 15:36:49

回答

1

this文章MSDN狀態:

默認情況下,本地和管理結構在 內存不同的佈局,如此成功地橫穿管理的 結構/非託管邊界需要額外的措施來保護數據 完整性。

您還可以在那裏使用PInvoke時找到可以派上用場的其他信息。

相關問題