2013-08-07 12 views
5

ile çıkıldı Yaptığım bir SharpDX programında garip bir hata alıyorum.program kodu -1073610751 (0xc0020001)

Program, SharpDX.Windows.RenderForm (Direct3D 9 yapıyorum) değerini alan bir form MainForm içerir. MainForm.Close() numaralı telefonu arayarak programı öldüren bir mantığım var ve mükemmel çalışıyor. Bununla birlikte, formu X düğmesiyle kapattığımda ya da ekranın sol üst köşesini çift tıkladığımda, program -1073610751 (0xc0020001) koduyla sona erer.

Bu, göreceli olarak küçük bir rahatsızlıktır, çünkü yalnızca program bittiğinde gerçekleşir, bu nedenle bir hatayla çıkıp çıkmaması gerçekten önemli değildir, çünkü aslında son işlemdir.

Ancak, Main() numaralı hattımın son satırında bir kesme noktası belirlediğimde bu hata oluşmaz. Bunu yaparsam ve sonra açıkladığım pencereyi kapatırsanız, kesme noktası vurulur ve devam ettirme işlemi kodu 0 ile sonlandırır.

SharpDX ve bir de saf C DLL'den başka bir veriye çağrı yapıyorum. Karışık kod veya başka garip şeyler yapmıyorum.

Etrafa baktım ama bu kod dize bağlamaları ile ilgili görünüyor? Diğer insanlar garip karışık C++/CLI şeyler yaparken bu sorun var gibi görünüyor, ama ben böyle bir şey yapmıyorum.

Herhangi bir fikrin var mı? en azından bu hata koduyla ilgili daha kısa bilgiler nasıl edinilir?

+1

Bu bağlantıyı kontrol edin ... http://blogs.msdn.com/b/cbrumme/archive/2003/04/15/51318.aspx - açıklamanızın bazı mesaj işlemlerinin (veya diğer geri aramaların Programınıza COM), - veya SharpDX'in yönetilen yöntemlerine geri çağrılan ve (zaman içinde) temizlenmeyen bir programdır. Bu geri bildirimler, yönetilen çalışma zamanı kapatıldıktan sonra ortaya çıkarsa, bu hatayı alırsınız. Eğer bu teori tutulursa, temizlik için zaman tanımak için * son satırda bir kesme noktası * belirir *. – JimmiTh

+0

Belki de kodun hatalarını ayıklamanız gerekir, bu da eğer bir 3. taraf ise bazı kodların gerçekten yardımcı olacağını gösterir.DLL belki el ile oluşturulan nesnelerin 'Dispose 'gerekir. Şimdiye kadar ne denediniz? – MethodMan

+1

Bu olabilir mi? http://connect.microsoft.com/VisualStudio/feedback/details/336844/static-variable-in-native-method-causes-exception-c0020001-during-process-exit –

cevap

3

Çok düşük seviyeli bir RPC hatasıdır. Programınızda kullanılması muhtemel olan, COM'un çalıştığı temel kuraldır. Çok sayıda aday var, SharpDX'in kendisi DirectX çağrıları yapmak için COM interop katmanını kullanıyor. DirectX'in kendisi de video sürücünüze bu tür aramalar yapma olasılığı yüksektir.

Ayrıca, bir kapatma sırası sorunu varsa tetiklenmeyi beklediğiniz hata kodudur. Yayımlandıktan sonra COM arayüzü kullanmak gibi. Bir programı temiz bir şekilde kapatmak, özellikle çok sayıda ileti olduğunda, çözülmesi zor bir sorun olabilir. DirectX uygulamasında vardır. Birisinin hata veritabanında biliniyor ve kaydedilse bile böyle bir problemi görmezden gelmek çok kolaydır. Çünkü, sizin de belirttiğiniz gibi, program, herhangi bir kötü istisna olmaksızın tamamen kapanır. RPC zaten patlatmasını engelledi, oluşturduğu hata kodunu görüyorsunuz.

Bu sorun hakkında kendiniz yapabileceğiniz çok az şey var, bu yazmadığınız bir kod ve asla programlayıcıyı bulamadınız. Çıktı penceresinde ilk fırsat istisnası bildirimi görürseniz, yönetilmeyen hata ayıklayıcıyı etkinleştirebilir, Hata Ayıklama + İstisnaları'nı kullanabilir ve Win32 özel durumu için Giden onay kutusunu işaretleyebilir, Microsoft Sembol sunucusunu etkinleştirebilir ve istisna olduğunda yığın izini alabilirsiniz. Atıldı. Bu, bakmak için hiçbir kaynak ile yerli kod bağırsaklarında olacak dikkat edin. Ancak, soruna neden olan DLL'yi işaret edebilir. Hala bu DLL'i düzeltmek için yapabileceğiniz hiçbir şey yok. En sık karşılaşılan sorun kaynağı olan bir video sürücüsü güncellemesi öneririm. Bunu alabildiğin kadarıyla.

+0

Harika cevap. Ne yazık ki, çıktı penceresine atılan ilk fırsat istisnasını göremiyorum. WinDBG ile de deneyeceğim. –