在Win32 C#WPF应用程序中使用UWP C ++ dll

时间:2018-08-10 12:06:30

标签: c# c++ uwp interop

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

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

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

  

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

据我所知,这个C ++ dll是作为C ++ / CX构建的(因为它在编译器中使用/ ZW标志),因此它包含非托管代码,所以我假设我需要一些可以从我的托管wpf应用程序调用这些函数的包装程序,但是我不确定如何实现此目标的最佳方法是什么,我们将不胜感激!

enter image description here

1 个答案:

答案 0 :(得分:1)

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

(注意:您不必将应用提交到商店才能使用Desktop Bridge;这只是打包应用的一种机制)。