تمت إزالة دعم UserMode منذ 29 مارس 2022. النسخة النهائية المعروفة لدعم UserMode هي E2F159F8F. يرجى استخدام VC-LTL5 بدلاً من ذلك في UserMode.
ucxxrt هي مكتبة وقت تشغيل مفتوحة المصدر تعتمد على MSVC. إن تسليط الضوء على هذا المشروع هو قابليته للاستخدام في برامج تشغيل وضع kernel ، ويوفر لك نفس التجربة تقريبًا مثل تطوير تطبيقات وضع المستخدم في C ++.
قبل ولادة ucxxrt ، من أجل استخدام C ++ STL في برامج تشغيل وضع kernel ، يتعين على المستخدمين صياغة مكتباتهم الخاصة (على سبيل المثال. KTL ، USTD ، ...). لا تزال هناك العديد من المشاكل. مثلها لا تدعم استثناءات C ++ ، وبشكل أساسي ، يكلف الكثير من الوقت لتنفيذ ميزات لغة جديدة عندما تحديثات C ++ ISO القياسية.
ثم ولد ucxxrt .
ucxxrt عند تطوير برامج تشغيل وضع kernel ، يتم تعطيل علامة وضع kernel باستخدام أوراق الممتلكات ، مما يجعل استثناءات C ++ للمترجم بالقوة. تم تمكين علامة الاستثناء ( /EHsc ).
تنفذ وظائف الاستثناء مثل throw ، catch . يحاكي مرسل الاستثناء في throw ويتولى الاستثناء في وظائف رد الاتصال.
قائمة الميزات غير المدعومة حاليا ↓
انظر Project Unittest لمزيد من المعلومات.
void Test$ThrowUnknow()
{
try
{
try
{
try
{
throw std::wstring ();
}
catch ( int & e)
{
ASSERT ( false );
LOG (DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, " Catch Exception: %d n " , e);
}
}
catch (std::string& e)
{
ASSERT ( false );
LOG (DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, " Catch Exception: %s n " , e. c_str ());
}
}
catch (...)
{
LOG (DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, " Catch Exception: ... n " );
}
}
void Test$HashMap()
{
auto Rand = std::mt19937_64 (:: rand ());
auto Map = std::unordered_map< uint32_t , std::string>();
for ( auto i = 0u ; i < 10 ; ++i)
{
Map[i] = std::to_string ( Rand ());
}
for ( const auto & Item : Map)
{
LOG (DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL,
" map[%ld] = %s n " , Item. first , Item. second . c_str ());
}
} أولاً ، إعادة تسمية DriverEntry إلى DriverMain .
انقر بزر الماوس الأيمن على المشروع ، حدد "إدارة حزم nuget". ابحث عن ucxxrt ، واختر الإصدار الذي يناسبك ، ثم انقر فوق "تثبيت".
قم بتنزيل أحدث حزمة من الإصدارات وفك ضغطها.
أضف ورقة الخصائص ucxxrt.props إلى مشروعك.
IDE : Visual Studio 2022 أحدث إصدار
و Windows SDK
وأدوات برنامج تشغيل Windows
git clone --recurse-submodules https://github.com/MiroKaku/ucxxrt.git
افتح ucxxrt.sln وبناء.
بالنسبة إلى Clang-Cl أو LLVM-MSVC ، سيتعين عليك إضافة -march=native في أعلام التحويل البرمجي.
بفضل JetBrains لتوفير تراخيص مجانية مثل Resharper C ++ لمشاريع المصدر المفتوح.
شكر رائع لهذه المشاريع الممتازة. بدون وجودهم ، لن يكون هناك
ucxxrtبعد ذلك.