مشكلة دقيقة في استدعاء C++/WinRT وحلها
2025-03-09

قام طلب سحب من C++/WinRT بإصلاح غموض في استدعاء `invoke` في `winrt::impl::promise_base::set_completed`، والذي سببه البحث المعتمد على الوسيطات (ADL). أدت الترقية إلى روتينات C++20 إلى توسيع مساحة بحث ADL، مما أدى إلى العثور على `std::invoke` بشكل غير متوقع بدلاً من `winrt::impl::invoke` المقصود. تشرح المقالة آلية ADL وتوفر تصحيحًا لإصدارات C++/WinRT القديمة: عن طريق إعلان دالة `invoke` أكثر ملاءمة في مساحة الاسم `winrt::Windows::Foundation` لإرشاد المترجم. يتضمن هذا التصحيح أيضًا تأكيدًا ثابتًا لضمان إزالته تلقائيًا بعد ترقية C++/WinRT.
التطوير