Araç ipuçları Windows Forms uygulamasında System.AccessViolationException oluşur

Belirtiler

ToolTip denetimi kullanan bir Microsoft .NET Windows Forms uygulaması geliştirilmiştir. Araç İpucu görüntülendiğinde, bir System.AccessViolationException alabilirsiniz ve sonlandırmak.

Neden

Bu uygulama comctl32.dll dosyasında Windows ortak denetimlerini 5.0 sürümünü kullanırken oluşur. Sorun ToolTip denetimi görüntülemek uygulama çalışırken gerçekleşmeden bir yeniden entrancy/zamanlama sorunu nedeniyle oluşur, ancak sonra başlangıçta görüntülenen önce saklamak için gerçekten çalışır bir kod yolu alır. Bu sürüm 5.0 Windows ortak denetimlerini (comctl32.dll), işletim sistemi tarafından sağlanan bir hata olduğunu.

Çözüm

Comctl32.dll 6.0 sürümü tarafından bu sorun giderilmiştir. Comctl32.dll 6.0 sürümüne katılmamayı seçmek için uygulama değiştirerek Windows Forms uygulamasında sorunu çözebilirsiniz. Comctl32.dll sürüm, Windows Forms 6.0 kabul etmek için uygulamalar Application.EnableVisualStylesçağırmalısınız.

Application.EnableVisualStyles yöntemi hakkında daha fazla bilgi için lütfen aşağıdaki MSDN belgelerine bakın.

Application.EnableVisualStyles yöntemi

Daha fazla bilgi

Araç İpucu oluşturulduğunda comctl32.dll daha sonra kullanılacak iç durum bilgilerini saklar. Kullanıcı anahtarları için başka bir uygulama, uygulama hala bekliyor, kod olduğunda araç ipucu görüntülemek için kullanılır. Uygulama bu etkinliği algıladığında, comctl32.dll bu zarar iç durum bilgilerini araç ipucu olarak işler. Bu tamamlandıktan sonra araç ipucu görüntülemek için çalışıyordu geri özgün koda çağrı yığını unwinds. Durum bilgisi erişim ihlaline neden olur null, denetlenmeden erişilir.

Hataya neden olan çağrı yığını şu hata ayıklama sırasında benzeyecektir.

System.AccessViolationException: Okuma veya korunan bellek yazma denendi. Bu genellikle diğer belleğin bozuk olduğunun bir göstergesidir.
System.Windows.Forms.UnsafeNativeMethods.CallWindowProc (IntPtr, IntPtr, Int32, IntPtr, IntPtr)
System.Windows.Forms.NativeWindow.DefWndProc (System.Windows.Forms.Message ByRef) at
System.Windows.Forms.ToolTip.WndProc (System.Windows.Forms.Message ByRef) at
System.Windows.Forms.ToolTip+ToolTipNativeWindow.WndProc (System.Windows.Forms.Message ByRef) at
System.Windows.Forms.NativeWindow.Callback (IntPtr, Int32, IntPtr, IntPtr) at


Windbg gibi yerel bir hata ayıklayıcı altında hata ayıklama ise aşağıdaki erişim ihlali ve çağrı yığını görürsünüz.

0:000 > r
eax=00000000 ebx=77392673 ecx=0012e59c edx=7c82845c esi=05d3cb80 edi=fffffdf7 
eip 775744b3 esp = 0012e5c0 ebp = 0012e604 iopl = = 0 nv up ei pl nz ac po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010212 
comctl32!DoShowBubble+0xc2: 
775744b3 8b480c mov ecx, dword ptr [eax + 0Ch] ds:0023:0000000 c =???
 
0:000 > knL
# ChildEBP RetAddr
00 0012e604 775746d 8 comctl32! DoShowBubble + 0xc2
01 0012e618 77543d 63 comctl32! ShowBubbleForTool + 0x32
02 0012e62c 775358c 3 comctl32! TTHandleTimer + 0x8b
03 0012e74c 7739b6e3 comctl32! ToolTipsWndProc + 0x311
04 0012e778 7739b874 user32! InternalCallWinProc + 0x28
05 0012e7f0 7739bfce0 user32! UserCallWinProcCheckWow + 0x151
06 0012e820 7739bf74 user32! CallWindowProcAorW + 0x98
07 0012e840 7b56a9ad user32! CallWindowProcW + 0x1b
08 0012e898 7b52b79d System_Windows_Forms_ni! System.Windows.Forms.NativeWindow.DefWndProc (System.Windows.Forms.Message ByRef) + 0x6d
09 0012e97c 7b52b70e System_Windows_Forms_ni! System.Windows.Forms.ToolTip.WndProc (System.Windows.Forms.Message ByRef) + 0x81
0a 0012e9d4 7b56a256 System_Windows_Forms_ni!System.Windows.Forms.ToolTip+ToolTipNativeWindow.WndProc(System.Windows.Forms.Message ByRef)+0x12 
0b 0012e9d4 010e20bd System_Windows_Forms_ni! System.Windows.Forms.NativeWindow.Callback (IntPtr, Int32, IntPtr, IntPtr) + 0x96


Varsayılan olarak, yeni Windows Forms uygulamaları otomatik olarak Application.EnableVisualStyles çağırmalısınız. C# projelerinde, bu yöntemi çağrısı void Main() Program.cs içinde uygulamanın giriş noktası eklenir. Visual Basic .net projelerinde, bu yöntemi otomatik olarak denir "Uygulama Çerçevesi etkinleştirmek" ve "XP görsel stilleri etkinleştir" seçenekleri projesinin Properties penceresinde seçilmiş.

Daha fazla yardıma mı ihtiyacınız var?

Yeteneklerinizi geliştirin
Eğitimleri keşfedin
Yeni özellikleri ilk olarak siz edinin
Microsoft Insider 'a katılın

Bu bilgi yardımcı oldu mu?

Geri bildiriminiz için teşekkür ederiz!

Geri bildiriminiz için teşekkürler! Office destek temsilcilerimizden biriyle görüşmeniz yararlı olabilir.

×