Bir iletişim kutusu oluşturan bir VB6 ActiveX DLL yöntemini çağıran bir .NET 3.5 winforms uygulamasına sahibim. Her şey neredeyse 10 yıl boyunca iyi çalıştı (ilk önce .NET 1.1 uygulaması, sonra 2.0, sonra 3.5, Windows XP'de). Şimdi müşteri Windows 7'ye yükseltti erdiğinden, aramanın bir System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
.NET/VB6 Uygulaması, Windows 7'de başarısız oluyor
yapıyı yaşıyorum şu şekildedir: VB6Object sınıfında
NET Kod
try {
VB6Object obj = new VB6Object();
obj.DoStuff();
}
catch (Exception ex) { // handle }
VB6 kodu
Public Sub DoStuff()
on error goto errHandle
RetrieveData();
Call frmPopup.Show(vbModal)
exitPoint:
exit sub
errHandle:
' handle error
End Sub
sorun VB6 kodunda başlar bu satırda: Call frmPopup.Show(vbModal)
. Hata, .NET koduna iletilir (VB6 kodundaki hata işleyicileri tamamen yok sayılır) ve hatayı işlemek. Sorunun frmPopup'un Load olayı olabileceğini düşündüm, ancak kod Load olayına hiç ulaşmadı (bende her yerde izleme ifadeleri var, dolayısıyla böyle biliyorum).
İlgi çekici kısmı, ikinci kez çağrı yaptığım, hiç başarısız olmadığının, ancak formun 3. parti bir ızgarayı (ActiveX DevExpress Quantum Grid) eksik olmasıdır, bu yüzden, ızgaranın muhtemelen muhtemelen Windows 7 ile bir şekilde uyumludur.
Açıkladığım her şey, uygulamayı bir EXE veya VS2008 IDE'den çalıştırdığımda gerçekleşir, bu nedenle VB6 ActiveX DLL'si yalnızca bir referanstır. COM dolaylı kullanımı kullanır ve IDE'de VB6 kodunu çalıştırırsam, her şey mükemmel çalışır.
Bir şeyi Yönetici olarak çalıştırmayı denedim, ancak hiçbir şey değişmedi.
Bu sorunu gidermek için nereye gidebilirim?
Windows'un eski sürümüyle uyumluluk içinde çalışmayı denediniz mi? Yürütülebilir dosyayı sağ tıklayın ve Uyumluluk sekmesine gidin; bazen sihir gibi çalışır. – BeemerGuy
@BeemerGuy, Evet. Bunu söylemeyi unuttum - evet, uyumluluk modunu denedim - işe yaramadı. – AngryHacker
VB6 kodunu bir VB uygulamasından çalıştırırsanız başarısızlığı yeniden üretebilir misiniz? Eğer öyleyse, VB hata ayıklayıcısını daha hassas bir şekilde izlemek için kullanabilirsiniz. –