Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Note
C++/WinRT Visual Studio Uzantısını (VSIX) (proje şablonu desteği sağlayan) yükleme ve kullanma hakkında bilgi için bkz. C++/WinRT için Visual Studio desteği.
Bu konu hemen farkında olmanız için ön taraftadır; henüz ihtiyacınız olmasa bile. Aşağıdaki sorun giderme belirtileri ve çözümleri tablosu, yeni kod kesme veya mevcut bir uygulamayı taşıma konusunda size yardımcı olabilir. Taşıma yapıyorsanız ve ileriye doğru ilerlemek ve projenizin derlendiği ve çalıştırıldığı aşamaya geçmek istiyorsanız, sorunlara neden olan temel olmayan kodlara yorum yaparak veya bu kodu saplayarak ve sonra bu borcu ödemek için geri dönerek geçici ilerleme sağlayabilirsiniz.
Sık sorulan soruların listesi için bkz. Sık sorulan sorular.
XAML sorunlarını izleme
XAML ayrıştırma özel durumlarını tanılamak zor olabilir; özellikle de özel durum içinde anlamlı hata iletileri yoksa. Hata ayıklayıcının ilk aşama özel durumlarını yakalayacak şekilde yapılandırıldığından emin olun (ayrıştırma özel durumunu erkenden yakalamaya çalışmak için). HRESULT veya iletinin yararlı bilgileri olup olmadığını belirlemek için hata ayıklayıcıda özel durum değişkenini inceleyebilirsiniz. Ayrıca, XAML ayrıştırıcısının hata iletileri çıkışı için Visual Studio çıkış penceresini denetleyin.
Uygulamanız kapanırsa ve bildiğiniz tek şey, XAML işaretlemesi ayrıştırılırken işlenmemiş bir özel durum fırlatılmış olmasıysa, bunun nedeni eksik bir kaynağa anahtarla yapılan bir başvuru olabilir. Ya da bu, bir UserControl, özel denetim veya özel bir yerleşim paneli içinde oluşturulan bir özel durum olabilir. Son çare ikili bölmedir. XAML Sayfasından işaretlemenin yaklaşık yarısını kaldırın ve uygulamayı yeniden çalıştırın. Ardından, hatanın kaldırdığınız yarıda mı (her durumda geri yüklemeniz gerekir) yoksa kaldırmadığınız yarıda mı olduğunu bilirsiniz. Hatayı içeren yarıyı bölerek işlemi tekrarlayın; sorunun kaynağını tam olarak bulana kadar bu şekilde devam edin.
Belirtiler ve çözümler
| Belirti | Çare |
|---|---|
| REGDB_E_CLASSNOTREGISTERED HRESULT değeriyle çalışma zamanında bir özel durum oluşturulur. | Bkz. Neden "sınıf kaydedilmemiş" istisnası alıyorum?. |
| C++ derleyicisi "'implements_type': '<yansıtılan tür>' doğrudan veya dolaylı temel sınıfının üyesi değil" hatasını üretir. | Uygulama türünüzün ad alanı nitelenmemiş adıyla (örneğin MyRuntimeClass) make çağrısı yaptığınızda ve bu türün üst bilgisini dahil etmediğinizde bu durum oluşabilir. Derleyici MyRuntimeClass'ı yansıtılan tür olarak yorumlar. Çözüm, uygulama türünüz (MyRuntimeClass.hörneğin) için üst bilgi eklemektir. |
| C++ derleyicisi "silinen bir işleve başvurmaya çalışılıyor" hatasını üretir. | Bu durum, make çağrısı yaptığınızda ve şablon parametresi olarak ilettiğiniz uygulama türünün bir = delete varsayılan oluşturucusu olduğunda meydana gelebilir. Uygulama türünün başlık dosyasını düzenleyin ve = delete ifadesini = default olarak değiştirin. Çalışma zamanı sınıfı için IDL'ye bir oluşturucu da ekleyebilirsiniz. |
| INotifyPropertyChanged uygulamasını uyguladınız, ancak XAML bağlamalarınız güncelleştirilmiyor (ve kullanıcı arabirimi PropertyChanged'e abone değil). | XAML biçimlendirmesinde bağlama ifadenizi Mode=OneWay (veya TwoWay) olarak ayarlamayı unutmayın. Bkz . XAML denetimleri; C++/WinRT özelliğine bağlama. |
| Bir XAML öğe denetimi gözlemlenebilir bir koleksiyona bağlandığında, çalışma zamanında "Parametre hatalı" iletisini içeren bir özel durum oluşur. | IDL’nizde ve uygulamanızda, herhangi bir gözlemlenebilir koleksiyonu Windows.Foundation.Collections.IVector<IInspectable> türünde bildirin. Ancak Windows.Foundation.Collections.IObservableVector<T> arabirimini uygulayan bir nesne döndürün; burada T, öğe türünüzdür. Bkz . XAML öğeleri denetimleri; C++/WinRT koleksiyonuna bağlama. |
| C++ derleyicisi "'MyImplementationType_base<MyImplementationType>': uygun varsayılan oluşturucu yok" biçiminde bir hata oluşturur. | Önemsiz olmayan bir oluşturucuya sahip bir türden türettiğinizde bu durum oluşabilir. Türetilmiş türünüzün oluşturucusunun, temel türün oluşturucusunun gerektirdiği parametreleri iletmesi gerekir. Ayrıntılı bir örnek için bkz. trivial olmayan bir oluşturucuya sahip bir türden türetme. |
| C++ derleyicisi "'const std::vector<std::wstring,std::allocator<_Ty>>' öğesinden 'const winrt::param::async_iterable<winrt::hstring> &' öğesine dönüştürülemiyor" hatasını üretir. | Bu durum, std::wstring öğesinin std::vector değerini koleksiyon bekleyen bir Windows Çalışma Zamanı API'sine geçirdiğinizde oluşabilir. Daha fazla bilgi için bkz. Standart C++ veri türleri ve C++/WinRT. |
| C++ derleyicisi "'const std::vector<winrt::hstring,std::allocator<_Ty>>' türünden 'const winrt::param::async_iterable<winrt::hstring> &' türüne dönüştürülemez" hatasını verir. | Bu durum, koleksiyon bekleyen asenkron bir Windows Çalışma Zamanı API’sine winrt::hstring öğelerinden oluşan bir std::vector aktardığınızda ve bu vektörü asenkron olarak çağrılan işleve ne kopyaladıysanız ne de taşıdıysanız ortaya çıkabilir. Daha fazla bilgi için bkz. Standart C++ veri türleri ve C++/WinRT. |
| Projeyi açarken Visual Studio "Proje için uygulama yüklü değil" hatasını üretir. | Henüz yüklemediyseniz Windows Uygulama SDK'sı C++ şablonlarını ve C++/WinRT Visual Studio Uzantısını (VSIX) yüklemeniz gerekir (bkz. C++/WinRT için Visual Studio destek). |
| Windows Uygulama Sertifika Kiti testleri, çalışma zamanı sınıflarınızdan birinin "bir Windows temel sınıfından türemediğine dair bir hata verir. Tüm bileşik sınıflar nihayetinde Windows ad alanındaki bir türden türemiş olmalıdır". | Temel sınıftan türetilen herhangi bir çalışma zamanı sınıfı (uygulamanızda bildirdiğiniz) birleştirilebilir sınıf olarak bilinir. Birleştirilebilir sınıfın nihai temel sınıfı, Windows.* veya Microsoft.* ad alanından kaynaklanan bir tür olmalıdır; örneğin, Microsoft. UI. Xaml.DependencyObject. Daha fazla ayrıntı için bkz . XAML denetimleri; C++/WinRT özelliğine bağlama . |
| C++ derleyicisi bir EventHandler veya TypedEventHandler temsilci özelleştirmesi için "T WinRT türü olmalıdır" hatası üretir. | Bunun yerine winrt::delegate<...T> kullanmayı düşünün. Bkz. C++/WinRT'de olay oluşturma. |
| C++ derleyicisi, Windows Çalışma Zamanı zaman uyumsuz işlem özelleştirmesi için "T WinRT türü olmalıdır" hatası üretir. | Bunun yerine bir Parallel Patterns Library (PPL) task döndürmeyi değerlendirin. Bkz. Eşzamanlılık ve zaman uyumsuz işlemler. |
| winrt::xaml_typename çağırdığınızda C++ derleyicisi "T WinRT türü olmalıdır" hatası üretir. | Öngörülen türü winrt::xaml_typename ile kullanın (örneğin, BgLabelControlApp::BgLabelControl kullanın), uygulama türünü kullanmayın (örneğin, BgLabelControlApp::implementation::BgLabelControl kullanmayın). Bkz . XAML özel (şablonlu) denetimleri. |
| C++ derleyicisi "error C2220: warning treated as error - no 'object' file generated" (hata C2220: uyarı hata olarak değerlendirilir- 'object' dosyası oluşturulmaz) üretir. | Uyarıyı düzeltin veya C/C++>Genel>Uyarıları Hata Olarak Değerlendir'iHayır (/WX-) olarak ayarlayın. |
| C++/WinRT nesnenizdeki bir olay işleyicisi nesne yok edildikten sonra çağrıldığından uygulamanız kilitleniyor. | Bkz. Olay işleme temsilcisiyle bu işaretçiye güvenli bir şekilde erişme. |
| C++ derleyicisi "C2338 hatası: Bu yalnızca zayıf başvuru desteği içindir" hatası üretir. | winrt::no_weak_ref işaretçi yapısını temel sınıfına şablon bağımsız değişkeni olarak geçirmiş bir tür için zayıf başvuru istiyorsunuz. Bkz . Zayıf başvuru desteğini geri çevirme. |
| C++ derleyicisi "consume_Something: 'auto' döndüren işlev tanımlanmadan önce kullanılamaz" | Bkz. C3779: Derleyici neden bana "consume_Something: 'auto' döndüren işlev tanımlanmadan önce kullanılamaz" hatası veriyor? |
| C++ bağlayıcısı "hata LNK2019: Çözülmemiş dış simge" üretir | Bağlayıcı neden bana "LNK2019: Çözülmemiş dış simge" hatası veriyor? bölümüne bakın. |
| LLVM ve Clang araç zinciri, C++/WinRT ile kullanıldığında hatalar üretir. | C++/WinRT için LLVM ve Clang araç zincirini desteklemiyoruz, ancak şirket içinde nasıl kullandığımıza öykünmek istiyorsanız, C++/WinRT ile derlemek için LLVM/Clang kullanabilir miyim? başlığı altında açıklanan deneme gibi bir deneme deneyebilirsiniz. |
| C++ derleyicisi, yansıtılan bir tür için "uygun varsayılan oluşturucu yok" hatasını verir. | Çalışma zamanı sınıfı nesnesinin başlatılmasını geciktirmeye veya aynı projede bir çalışma zamanı sınıfını kullanmak ve uygulamak için std::nullptr_t oluşturucuyu çağırmanız gerekir. Daha fazla bilgi için bkz . C++/WinRT ile API'leri kullanma. |
| C++ derleyicisi "hata C3861: 'from_abi': tanımlayıcı bulunamadı" ve base.h dosyasından kaynaklanan diğer hataları üretir. Visual Studio 2017 (sürüm 15.8.0 veya üzeri) kullanıyorsanız ve Windows SDK sürüm 10.0.17134.0'ı (Windows 10, sürüm 1803) hedef alıyorsanız bu hatayı görebilirsiniz. | Windows SDK'sının daha sonraki (daha uyumlu) bir sürümünü hedefleyin veya C/C++>Dil>Uyumluluğu modunu ayarlayın: Hayır (ayrıca, proje özelliği C/C++>>Ek Seçenekler'in altında /permissive- görünüyorsa, silin). |
| C++ derleyicisi "hata C2039: 'IUnknown': ''global namespace'' üyesi değil" hatası üretir. | Bkz. C++/WinRT projenizi daha sonraki bir Windows SDK sürümüne yeniden hedefleme. |
| C++ bağlayıcısı "hata LNK2019: _VSDesignerCanUnloadNow@0 işlevinde başvurulan çözülmemiş dış simge _WINRT_CanUnloadNow@0" şunu üretir | Bkz. C++/WinRT projenizi daha sonraki bir Windows SDK sürümüne yeniden hedefleme. |
| Derleme işlemi şu hata iletisini üretir: C++/WinRT VSIX artık proje derleme desteği sağlamıyor. Lütfen Microsoft.Windows.CppWinRT NuGet paketine bir proje başvurusu ekleyin. | Microsoft.Windows.CppWinRT NuGet paketini projenize yükleyin. Ayrıntılar için bkz. VSIX uzantısının önceki sürümleri. |
| C++ bağlayıcısı, LNK2019 hatasını verir: çözümlenmemiş dış sembol; ve winrt::impl::consume_Windows_Foundation_Collections_IVector ifadesinden bahseder. |
C++/WinRT 2.0 itibarıyla, bir Windows Çalışma Zamanı koleksiyonu üzerinde aralık tabanlı for kullanıyorsanız, artık #include <winrt/Windows.Foundation.Collections.h> yapmanız gerekir. |
| C++ derleyicisi "hata C4002: GetCurrentTime işlev benzeri makro çağrısı için çok fazla bağımsız değişken" üretir. | Bkz. GetCurrentTime ve/veya TRY ile belirsizlikleri nasıl çözebilirim?. |
| C++ derleyicisi "hata C2334: '{' öncesinde beklenmeyen belirteçler; görünür işlev gövdesi atlanıyor". | Bkz. GetCurrentTime ve/veya TRY ile belirsizlikleri nasıl çözebilirim?. |
| C++ derleyicisi "winrt::impl::produce<D,I> eksik GetBindingConnector nedeniyle soyut sınıf örneği oluşturulamaz" üretir. |
#include <winrt/Microsoft.UI.Xaml.Markup.h> yapmanız gerekir. |
| C++ derleyicisi "error C2039: 'promise_type': 'std::experimental::coroutine_traits<void>' üyesi değil" hatası üretir. | Eş yordamınızın ya bir eşzamansız işlem nesnesi ya da winrt::fire_and_forget döndürmesi gerekir. Bkz. Eşzamanlılık ve zaman uyumsuz işlemler. |
| Projeniz "'PopulatePropertyInfoOverride' için belirsiz erişim" üretir. | IdL'nizde bir temel sınıf ve XAML işaretlemenizde farklı bir temel sınıf bildirdiğinizde bu hata oluşabilir. |
| Bir C++/WinRT çözümü ilk kez yüklendiğinde "'MyProject.vcxproj' projesi 'Debug|x86' yapılandırması için tasarım zamanı derlemesi başarısız oldu. IntelliSense kullanılamıyor olabilir." iletisi görüntülenir. | Bu IntelliSense sorunu, projeyi ilk kez derlediğinizde çözülür. |
| Temsilci kaydederken winrt::auto_revoke belirtilmeye çalışıldığında winrt::hresult_no_interface özel durumu oluşturulur. | Bkz. Otomatik iptal temsilciniz kaydedilemiyorsa. |
| C++/WinRT uygulamasında, XAML kullanan bir C# Windows Çalışma Zamanı bileşeni kullanılırken, derleyici "'MyNamespace_XamlTypeInfo': 'winrt::MyNamespace' üyesi değil" biçiminde bir hata üretir; burada MyNamespace, Windows Çalışma Zamanı bileşeninin ad alanının adıdır. | C++/WinRT kullanan uygulamada pch.h içine #include <winrt/MyNamespace.MyNamespace_XamlTypeInfo.h> ekleyin; uygun şekilde MyNamespace yerine kullanın. |
| Visual Studio’da bir C++/WinRT projesinde IntelliSense, "hata E1696: kaynak dosya açılamıyor" biçiminde bir hata verir. | Yeni oluşturduğunuz projenizi en az bir kez derleyin. Ardından kaynak kodu düzenleyicisinde sağ tıklayıp >Yeniden Tara>Dosyayı Yeniden Tara seçeneğini belirleyin. Bu, E1696 da dahil olmak üzere tüm IntelliSense hatalarını çözer. |
Note
Bu konu sorunuzu yanıtlamadıysa, Visual Studio C++ geliştirici topluluğunu ziyaret ederek veya Stack Overflow'da etiketini kullanarakc++-winrt yardım bulabilirsiniz.
İlgili konular
Note
Birçok C++/WinRT konusu UWP belgelerinden bu bölüme geçirilmeye çalışılmaktadır. Geçiş tamamlanana kadar, aşağıdaki listede yer alan bağlantılar UWP belgeleri bölümüne yol açabilir. C++/WinRT dil projeksiyonu hem UWP hem de WinUI 3 uygulamaları için aynıdır, böylece içerik her iki bağlamda da geçerlidir. UWP'ye özgü desenler (uygulama yaşam döngüsü veya Windows.UI ad alanı API'leri gibi) bu makalelerde açıkça not edilir.
Windows developer