如何在我的 .Net Framework 项目中添加对 Windows 运行时组件 (C++/WinRT) 的引用

How to add a reference to Windows Runtime Component (C++/WinRT) in my .Net Framework project

我在一个解决方案中启动了 2 个项目,一个是 .Net Framework 4.7.2,另一个是 Windows Runtime Component(C++/WinRT)

我想做的是在WindowsRuntimeComponent中写我的DirectX相关代码,然后暴露一定数量的类给.NetFramework项目

我只是在.Net项目中添加了对WindowsRuntimeComponent项目的引用,成功了,.Net似乎理解了C++项目中的内容 但是,当我尝试从 WindowsRuntimeComponent

创建实例时

它给我一个错误说...

Class not registered(Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG) error screenshot

我是 COM 的新手,我对 COM 的了解基本上都是形式 enter link description here 那我该怎么办?

要通过 WinRT 实例化 class(您在 C++/CX 中创建的 class),您需要在清单中声明它,否则 Windows 将不知道哪个 . dll 文件来查找(这将导致 REGDB_E_CLASSNOTREG HRESULT/ClassNotRegistered 异常)。

直到最近,这仅适用于 UWP 应用程序,他们必须在其 AppXManifest.xml 文件中声明这些依赖项。但是,最近的 Windows 版本支持在 Win32 清单中声明这些依赖项。这就是你的做法:

<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
    <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
    <file name="RuntimeComponent1.dll">
        <activatableClass name="RuntimeComponent1.Class" threadingModel="both" xmlns="urn:schemas-microsoft-com:winrt.v1" />
    </file>
</assembly>

您可以在此处阅读更多相关信息:

https://blogs.windows.com/windowsdeveloper/2019/04/30/enhancing-non-packaged-desktop-apps-using-windows-runtime-components/