我有一個.NET 3.5 WinForms應用程序調用在VB6的ActiveX DLL,它會彈出一個對話框的方法。一切運行良好近10年(首先作爲.NET 1.1應用程序,然後2.0,然後3.5,所有在Windows XP上)。現在,客戶已經升級到Windows 7,我遇到了通話的System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
.NET/VB6應用程序無法在Windows 7
的結構是這樣的:
.NET代碼
try {
VB6Object obj = new VB6Object();
obj.DoStuff();
}
catch (Exception ex) { // handle }
在VB6Object類VB6代碼
Public Sub DoStuff()
on error goto errHandle
RetrieveData();
Call frmPopup.Show(vbModal)
exitPoint:
exit sub
errHandle:
' handle error
End Sub
該問題從VB6代碼開始在這條線上:Call frmPopup.Show(vbModal)
。錯誤傳播到.NET代碼(在VB6代碼中的錯誤處理程序完全忽略),我處理錯誤。我認爲這個問題可能是frmPopup的Load事件,但代碼永遠無法到達Load事件(我在遍地都有跟蹤語句,所以這就是我所知道的)。
有趣的部分是,我第二次打電話時,它根本沒有失敗,但窗體缺少第三方網格(ActiveX DevExpress Quantum Grid),所以我假設網格可能不是我所描述的兼容某種程度上與Windows 7
發生的一切時,我只需運行該應用程序爲EXE或從VS2008 IDE,所以VB6的ActiveX DLL是一個簡單的參考。如果我使用COM間接方式並在IDE中運行VB6代碼,則一切正常。
我已經嘗試運行的東西作爲管理員,但沒有任何改變。
我在哪裏可以去解決這個問題?
您是否嘗試過與舊版Windows的兼容性?用鼠標右鍵單擊該可執行文件並轉到兼容性選項卡;有時候就像魔術一樣。 – BeemerGuy 2010-11-19 01:01:45
@BeemerGuy,是的。我忘了提及 - 是的,我嘗試了兼容模式 - 它不起作用。 – AngryHacker 2010-11-19 01:04:49
如果您從VB應用程序中運行VB6代碼,是否可以重現該故障?如果是這樣,你可能能夠使用VB調試器更精確地追蹤它。 – 2010-11-19 02:47:24