Çok iş parçacıklı bir daireden kabuk işlevlerini ve arabirimlerini çağırma
Çok iş parçacıklı bir daire olarak başlatılan bir iş parçacığından bir kabuk işlevini veya kabuk arabirimini çağırdığınızda veya eriştiğinde, işlevin veya arabirimin işlevselliği bozulmuş veya tamamen başarısız olabilir.
Özgün sürüm: Windows kabuğu ve Arabirimi
Özgün KB numarası: 287087
Neden
çağrısı, CoInitializeEx (COINIT_MULTITHREADED)
çağrı iş parçacığında oluşturulan nesnelere yapılan çağrıların herhangi bir iş parçacığında çalıştırılmasına olanak tanır. Çok iş parçacıklı bir daireden apartman iş parçacığı modelini kullanan nesnelere erişirken, COM nesneye erişimi eşitler. Bu eşitlemenin gerçekleşmesi için COM'un nesneye çağrıları hazırlaması gerekir. Kabuk şu anda bir tür kitaplığı veya ara sunucu/saptama kodu aracılığıyla gerekli bilgileri sağlamadığından, nesnelerinin sıralanması için çok iş parçacıklı bir daireden kabuk nesnelerine erişme girişimi başarısız olur.
Kabuk işlevlerini etkileyebilecek çağrılar
Aşağıda, çağrısının CoInitializeEx (COINIT_MULTITHREADED)
kabuk nesnelerini kullanan işlevleri nasıl etkileyebileceğine ilişkin örnekler verilmiştir:
GetOpenFileName/GetSaveFileName
Kullanıcılar, Aç ve Farklı Kaydet iletişim kutusu aracılığıyla Belgelerim gibi ad alanı uzantısı klasörlerine gidebilir. Ancak, tarayıcı gibi
IShellFolder
gerekli arabirimleri oluşturamadığından bu klasörlere göz atılamaz.ShellExecute/ShellExecuteEx
ShellExecute
kancaları, veya arabirimini uygulayarakIShellExecuteHook
işlevselliğiniShellExecute
ShellExecuteEx
genişletmek için yazılabilir. VeyaShellExecuteEx
çağrıldığındaShellExecute
, kayıtlıShellExecute
kancalar yüklenemez.
Bu örneklerin her ikisinde de, , IUnknown::QueryInterface
vb. ile CoCreateInstance
bir kabuk nesnesine arabirim işaretçisi elde etmeye çalışan bileşen, çok iş parçacıklı dairelerden çağrıldığında genellikle hatayla E_NOINTERFACE
başarısız olur. Yukarıda belirtildiği gibi nedeni, istenen nesneler için tür bilgisi veya ara sunucu/saptama kodu olmamasıdır.
Başvurular
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin