PInvoke çağrılarına yeni başlayan biriyim. Bunu basit bir soru gibi görüyorum ama neşe yok diye düşündüm.Windows Mobile API çağrıları - başarı ancak GetLastWin32Error hata kodunu döndürüyor - endişelenmeli miyim?
Üst üste Windows Mobile API çağrıları yapıyorum (uygulamanızın çalışıp çalışmadığını algılamak ve sonra yeniden etkinleştirmek için). Her şey iyi ve dandy çalışır ama ben iyi çalışmadığı zamanlar için giriş vb koymak istedim. Benim aramalar görünüşte geçerli bir sonuç ve bir sonraki çağrı tarafından başarıyla kullanılmaktadır geçerli bir sonuç döndüğünüzde bile hata kodları alacak bulundu bu kodu yazarken
(bence geçerli olduğundan kanıtlayan.)
Ör Şu anda çalışan işlemlerin anlık görüntüsüne geri dönme sağlayan CreateToolhelp32Snapshot'ı arıyorum. Marshal.GetLatWin32Error'ı arayarak, hemen ardından Geçersiz Sap anlamına gelen Hata 6'yı çağırır. Ancak döndürülen değer, diğer yöntemlere yapılan çağrılar ve tüm süreç çalışmaları ile başarılı bir şekilde kullanılır. Kesinlikle bu çağrı, Hata 6'yı ayarlar. Çünkü eğer Marshal.GetLatWin32Error'ı çağırırsa, sadece çağrı gelmeden önce 0 döner.
Process32First ve Process32Next çağrıları benzer davranışı gösterir, yani süreç bilgisini memnuniyetle verir ancak bazen Hata 6'yı ayarlarlar. (düşünüyorum) Bunun gerçekleştiğini biliyorum çünkü her aramadan önce ve sonra Marshal.GetLatWin32Error hemen aramasını ve bazen 0'dan 6'ya sonra aramam. Şu anda her zaman başarılı bir sonuç alıyorum (ya sıradaki çağrılar ile çalışan bir tanıtıcı veya bool ve işlem bilgisi arabelleğe başarıyla kopyalandığında int veya true olursa 1'e atanan bir değer).
Yani umurumda mıyım? Her şey çalışıyor ... İşlemin geri kalanı tarafından başarıyla kullanılan bir sonucu geri alırsam hangi hatanın ayarlandığını umursuyorum? Bağırmam evet diyor, kesinlikle mi? Her iki durumda da, görünüşe göre başarılı bir sonuç elde edersem, ancak bir hata kodu da belirlenirse, her şeyin yolunda olup olmadığını nasıl anlarım? Ben
GÜNCELLEME ........ geri Bana yararlı hata bilgiler veren olmayacak kararsız bir sistem oluşturması hakkında kabus yaşıyorum
Bu denemek ve göstermek için benim loggong kod sonuçları ne İlgilenenler için konuşuyorum. Kısaca, kod zaten kendi başına çalışan kopyalarını kontrol eder, daha sonra müşterinin zaten çalışmakta olan kopyaları için kontrol eder ve ardından bulduğunda müşteriyi yeniden etkinleştirir.
Method name: CreateToolhelp32Snapshot, Result: 605618176, Pre-call error code: 0, Post-call error code: 6
Method name: Process32First, Result: True, Pre-call error code: 6, Post-call error code: 6
Method name: Process32Next, Result: True, Pre-call error code: 6, Post-call error code: 6
Method name: Process32Next, Result: True, Pre-call error code: 6, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: False, Pre-call error code: 0, Post-call error code: 18
Method name: CloseToolhelp32Snapshot, Result: True, Pre-call error code: 18, Post-call error code: 6
Method name: CreateToolhelp32Snapshot, Result: 605618176, Pre-call error code: 6, Post-call error code: 0
Method name: Process32First, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: True, Pre-call error code: 0, Post-call error code: 0
Method name: Process32Next, Result: False, Pre-call error code: 0, Post-call error code: 18
Method name: CloseToolhelp32Snapshot, Result: True, Pre-call error code: 18, Post-call error code: 0
Method name: ShowWindow, Result: True, Pre-call error code: 0, Post-call error code: 120
Method name: SetForegroundWindow, Result: True, Pre-call error code: 120, Post-call error code: 6
sonuç hep 18 son giriş ulaşıldı belirten kod ile hangi başarısızlık için Process32Next son aramalar dışında doğrudur. Ve sadece ShowWindow'un desteklenmeyen Hata 120 ile sonuçlandığını fark ettim, böylece bu çağrıyı alacağım.
Yani benim iki gerçek sorular şunlardır:
Neden hataları bir başarı var mı?
Arama öncesi ve arama sonrası hataları aynı olduğunda, bunun eski hatanın mı yoksa aynı hatanın ikinci bir durum mu olduğunu nasıl anlarım?
Bu benim elde edemediğim bir şey. Bağlantı, INVALID_HANDLE_VALUE alırsanız yalnızca * * GetLastWin32Error öğesini çağırabileceğinizi söylemez. Ve GetLastWin32Error belgelerine, SetError'ın doğru olduğu son PInvoke çağrısından hataları sakladığını söylüyor. Son hata bu durumda kurgu işi mi? –
Ya da MSDN tarafından belirtilen ceratin değerleri geri almadıkça önemli değil mi? –
Nm, Google aramalarımı söylediklerinize göre daralttım ve bunu buldum: http://blogs.msdn.com/adam_nathan/archive/2003/04/25/56643.aspx –