Skip to content

Latest commit

 

History

History
145 lines (107 loc) · 4.6 KB

README.zh-CN.md

File metadata and controls

145 lines (107 loc) · 4.6 KB

Musa.Runtime - 通用 C++ 运行时库

Actions Status Downloads LICENSE Visual Studio Windows Platform

1. 关于

Musa.Runtime 是以 Musa.Core 作为底层支持的微软 MSVC 运行时库,是 ucxxrt 的新架构的实现。

它可以让内核开发者拥有和应用开发者近似的 C++ 开发体验。

1.1 特性

  • 支持 x64、ARM64(实验性)
  • 支持 New/Delete
  • 支持 C++ Exception (/EHa、/EHsc) (IRQL <= APC_LEVEL)
  • 支持 Static Objects
  • 支持 SAFESEH、GS (Buffer Security Check)
  • 支持 STL (OneCore、CoreCRT)
  • 支持 thread_local

1.2 例子

在 Musa.Runtime.TestForDriver 查看更多 ...

void Test$ThrowUnknow()
{
    try {
        try {
            try {
                throw std::wstring();
            }
            catch (int& e) {
                ASSERT(false);
                MusaLOG("Catch Exception: %d\n", e);
            }
        }
        catch (std::string& e) {
            ASSERT(false);
            MusaLOG("Catch Exception: %s\n", e.c_str());
        }
    }
    catch (...) {
        MusaLOG("Catch Exception: ...\n");
    }
}

void Test$HashMap()
{
    auto Rand = std::mt19937_64(::rand());
    auto Map  = std::unordered_map();
    for (auto i = 0u; i < 10; ++i) {
        Map[i] = std::to_string(Rand());
    }

    for (const auto& Item : Map) {
        MusaLOG("map[%ld] = %s\n", Item.first, Item.second.c_str());
    }
}

2. 使用方法

** 首先 DriverEntry 需要改为 DriverMain。**

2.1 方法一(推荐)

右键单击该项目并选择“管理 NuGet 包”,然后搜索Musa.Runtime并选择适合你的版本,最后单击“安装”。

或者

如果你的项目模板用的是 Mile.Project.Windows,那么可以直接在你的 .vcxproj 文件里面添加下面代码:

  <ItemGroup>
    <PackageReference Include="Musa.Runtime">
      <!-- 期望的版本 -->
      <Version>0.1.0</Version>
    </PackageReference>
  </ItemGroup>

2.2 方法二

  1. release 下载最新包并解压。
  2. 编辑你的 .vcxproj 文件,在里面添加下面代码:
  <PropertyGroup>
    <MusaRuntimeOnlyHeader>false</MusaRuntimeOnlyHeader>
  </PropertyGroup>
  <Import Project="..\Musa.Runtime\config\Musa.Runtime.Config.props" />
  <Import Project="..\Musa.Runtime\config\Musa.Runtime.Config.targets" />
  <!-- 在这一行上面 -->
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

2.3 仅头文件模式

在你的 .vcxproj 文件里面添加下面代码:

  <PropertyGroup>
    <MusaRuntimeOnlyHeader>true</MusaRuntimeOnlyHeader>
  </PropertyGroup>

这个模式不会自动引入lib文件。

3. 编译方法

IDE:Visual Studio 2022 最新版

> git clone --recurse-submodules https://github.com/MiroKaku/Musa.Runtime.git
> .\BuildAllTargets.cmd

4. 鸣谢

IntelliJ IDEA 是一个在各个方面都最大程度地提高开发人员的生产力的 IDE。

特别感谢 JetBrains 为开源项目提供免费的 Resharper C++ 等 IDE 的授权

ReSharper C++ logo.

5. 引用参考

非常感谢这些优秀的项目,没有它们的存在,就不会有 Musa.Runtime。