如何从 C++ UWP App 引用 C# UWP Class 库
How to reference C# UWP Class Library from C++ UWP App
我在尝试从 C++ UWP 应用引用 C# UWP class 库中的方法时收到 COMException。这发生在最基本的设置中,所以我一定是做错了什么。
转载:
- 使用Visual Studio(我用的是16.5.4),新建一个"Blank App (Universal Windows - c++/CX)"
- 向解决方案添加新的 "Windows Runtime Component (Universal Windows)",C#,名为 "ClassLib"
- 将此方法添加到 Class1.cs:
public static int GetNumber() { return 22; }
- 将 MainPage 构造函数修改为如下所示:
using namespace ClassLib;
MainPage::MainPage()
{
InitializeComponent();
auto foo = Class1::GetNumber();
}
- 执行申请。此异常发生在 MainPage 构造函数中:
Exception thrown at 0x76984402 in UWPApp.exe:
Microsoft C++ exception:
Platform::COMException ^ at memory location 0x0421DD44.
HRESULT:0x80131040 The text associated with this error code could not be found.
此问题是由于从 C++/CX 或 C++ WinRT 项目调用基于 .net 的 WinRT 组件所致。为了让它工作,你可以在你的 c++/cx 项目中添加 Microsoft.Net.Native.Compiler
nuget 包并先安装它。然后右击项目->卸载项目->编辑.vcxproj。之后,在其中添加以下属性。
<PropertyGroup>
<UseDotNetNativeToolchain Condition="'$(Configuration)'=='Release'">true</UseDotNetNativeToolchain>
<DotNetNativeVersion>2.2.3</DotNetNativeVersion>
</PropertyGroup>
注意,将上面的2.2.3版本替换成你安装的Microsoft.Net.Native.Compilernuget包的版本。更详细的可以参考这篇类似的thread.
我在尝试从 C++ UWP 应用引用 C# UWP class 库中的方法时收到 COMException。这发生在最基本的设置中,所以我一定是做错了什么。
转载:
- 使用Visual Studio(我用的是16.5.4),新建一个"Blank App (Universal Windows - c++/CX)"
- 向解决方案添加新的 "Windows Runtime Component (Universal Windows)",C#,名为 "ClassLib"
- 将此方法添加到 Class1.cs:
public static int GetNumber() { return 22; }
- 将 MainPage 构造函数修改为如下所示:
using namespace ClassLib;
MainPage::MainPage()
{
InitializeComponent();
auto foo = Class1::GetNumber();
}
- 执行申请。此异常发生在 MainPage 构造函数中:
Exception thrown at 0x76984402 in UWPApp.exe:
Microsoft C++ exception:
Platform::COMException ^ at memory location 0x0421DD44.
HRESULT:0x80131040 The text associated with this error code could not be found.
此问题是由于从 C++/CX 或 C++ WinRT 项目调用基于 .net 的 WinRT 组件所致。为了让它工作,你可以在你的 c++/cx 项目中添加 Microsoft.Net.Native.Compiler
nuget 包并先安装它。然后右击项目->卸载项目->编辑.vcxproj。之后,在其中添加以下属性。
<PropertyGroup>
<UseDotNetNativeToolchain Condition="'$(Configuration)'=='Release'">true</UseDotNetNativeToolchain>
<DotNetNativeVersion>2.2.3</DotNetNativeVersion>
</PropertyGroup>
注意,将上面的2.2.3版本替换成你安装的Microsoft.Net.Native.Compilernuget包的版本。更详细的可以参考这篇类似的thread.