2009-08-07 72 views
1

我的Windows應用程序使用用戶控件和一個DLL加載4個電腦。其中一個彈出,「試圖讀取/寫入受保護的內存」。請給我建議。試圖讀取/寫入受保護的內存

Windows窗體僅用作背景。用戶控件加載在這個獲勝表單上,並在引用中添加一個dll。

回答

1

我是在一個應用程序獲得完全相同的消息,這是非常很難得到它解決。我已經搜索了這個消息,並找到了一些不同的原因和解決方案....他們都沒有爲我工作。

那麼,在我的情況下,我在我的.NET應用程序中使用COM對象....並且該錯誤會隨機出現在代碼的不同部分。最終,很多時候debbugging後,我發現下面的行是導致錯誤:

arr = doc.GetAllExternalReferences3(objOptions, objRefVar, objIsVirtual)

坷Ref和objIsVirtual是按地址參數。我不是一位Interop專家,但似乎從原始類型(在COM中)轉換爲.NET中的「對象」時效果不佳,特別是當這些對象的範圍完成時。無論如何,我不需要這些值,並有一個重載的方法,不需要這些參數。所以我很幸運,並且不需要深入到COM互操作細節。無論如何,我瞭解到,一個COM對象返回到.NET的東西必須非常小心....

不知道這是否適合您。但也許這個軟件可以幫助其他人搜索這個消息。

0

沒有太多的東西是不同的一臺PC上的用戶權限?

+1

無論何時內存出現故障或損壞,都會彈出此錯誤 - 與用戶權限無關。 – 2009-08-07 04:02:01

+0

它可能是燙髮的問題。 – klabranche 2009-08-07 04:03:40

+0

你能證實嗎? – 2009-08-07 04:20:38

3

我不認爲這與用戶權限有任何關係,正如其他人所說的那樣。

我在使用C#中的不安全指針時遇到過這種情況。這是您嘗試在另一個程序的內存上寫入時得到的錯誤。

你可能會嘗試做什麼(除了在你的測試機器上部署一個調試版本),就是打開Visual Studio中的AccessViolationException。您可以通過調試>例外>通用語言運行時例外>系統來完成此操作。選中System.AccessViolationException旁邊的複選框。如果你幸運的話,你會看到錯誤發生的地方。

編輯:

另外,我發現這個舊的帖子裏另一個海報也有類似的問題: Attempted to read or write protected memory

+0

有用的提示(在AccessViolationException打開break)+1 – krebstar 2009-11-23 05:45:34

+0

嗨,我不知道它是否被重新激活。我留下來告訴的是,我也在另一個C#win窗體中使用這個dll,它不使用usercontrol。但是這個api工作正常。所以,我將整個用戶控件改爲窗體形式。從那時起,這個問題再也沒有發生過。我仍然無法弄清楚爲什麼。 – TNA 2010-07-28 14:03:46

+0

聽起來像你的用戶控件做錯了一些事情。用戶控制的目的是什麼?我很高興這個問題不再發生,但如果我是你,我仍然想知道原因:) – 2010-07-28 21:23:34

相關問題