首页 > 解决方案 > 在 Win32 C# WPF 应用程序中使用 UWP C++ dll

问题描述

我正在尝试使用 Microsoft 在 Win32 C# WPF 应用程序中的一个 UWP 示例示例中使用的 SimpleCommunication C++ DLL。

https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/SimpleCommunication/common/MediaExtensions/Microsoft.Samples.SimpleCommunication

我尝试添加对在将 SimpleCommunication .dll 构建到我的 Win32 C# WPF 应用程序时生成的 .dll 和 .winmd 文件的引用,但是每当我尝试从 SimpleCommunication 调用任何函数时,我都会收到以下异常消息:

引发异常:mscorlib.dll 中的“System.TypeLoadException”mscorlib.dll 中发生“System.TypeLoadException”类型的未处理异常找不到 Windows 运行时类型“Microsoft.Samples.SimpleCommunication.StspMediaSinkProxy”。

据我所知,这个 C++ dll 是作为 C++/CX 构建的(因为它在编译器中使用 /ZW 标志),因此它包含非托管代码,所以我假设我需要某种包装器能够从我的托管 wpf 应用程序中调用这些函数,但我不确定解决此问题的最佳方法是什么,任何帮助将不胜感激!

在此处输入图像描述

标签: c#c++uwpinterop

解决方案


尽管 WPF 应用程序可以使用系统提供的WinRT 类型(Windows命名空间中的那些),但它们不能使用自定义 WinRT 类型,因为 Windows 不知道如何定位它们。解决方案是使用桌面桥将您的 WPF 应用程序添加到 AppX 包中,此时 Windows 将能够找到并激活您的类型。

(注意:您不必将应用提交到应用商店即可使用桌面桥;它只是一种打包应用的机制)。


推荐阅读