2010-10-30 22 views
8

Arabirim ve DirectX adlı bu şey ile yeni yaşıyorum. Belirli bir oyundan bir DirectX Arayüzü kullanıyorum ve Dokular ve Yazı Tipleri gibi Kendi Nesnemi Çizmek için DirectX'i kullanıyorum. Sorunum şudur: Program Cihazın Kancalı Sıfırlama İşlevi'ni çağırdığında, tüm şeyleri bellekten, Com Arabirimleri'nden temizlemem gerekir. Temizlemediyse, Sıfırlama olayı çağrıldıktan sonra, Oyun sadece d3dDierctx9Create'ı çağırmak için yeni bir yüzey oluşturun ve başarısız olun ve sadece bir hata yapın ve oyunu kapatın.Arabirim nasıl serbestlenir?

Sadece Sıfırlama Olayı'ndan önce tüm şeyleri temizlemem gerektiğini düşünüyorum, onun Msdn.

cevap

19

Bir arabirim serbestsiniz. Derleyici tarafından referans sayılır ve yönetilir. Kapsam dışında kalsın, değişkene farklı bir arabirim atayın ya da nil atayın ve derleyici otomatik olarak _Release yöntemine bir çağrı üretecek ve böylece referans sayısı 0'a düştüğünde kendini temizleyecektir.

+0

Bu nedenle directx kaynakları ile, destekledikleri takdirde genellikle 'onResetDevice' olarak adlandırırsınız veya bunları yeniden oluşturur ve Delphi değişkenine yeniden atayabilirsiniz. Mason, orijinal kaynağı otomatik olarak serbest bırakacak, tıpkı kaynağın serbest kalmasını engelleyeceğinden (yani, referenceCount> 0), başka bir değişkenin kaynağını bir yerde tutmamak için gerçekten dikkatli olmalısınız. Genellikle kaynağı yöneten bir çeşit sarıcı nesneler kullanarak bunu biraz daha kolaylaştırır. –

İlgili konular