C++/CX能简化我(非WinRT)的WPF应用程序吗?

9
C++/CX似乎比当前使用C++/CLI“层”中间层更容易且直接地将本机C++与C#进行接口处理(涉及的所有复杂性)。但是我可以在老派WPF桌面式应用程序中使用C++/CX吗?澄清一下:我的WPF应用程序“包装”了旧的Windows32应用程序代码。因此,我正在与本机C++进行交互,但在同一应用程序中具有本机C++,托管C++和C#可能会很麻烦。

2
C++/CX 生成纯本地代码,不像 C++/CLI。由于 C++/CX 引用类在底层是 COM,因此一些互操作是可能的。但是注册过程会比较棘手,因为 WinRT 使用非常不同的部署方案(所有内容都在一个 .zip 文件中)。你必须想办法进行注册。C++/CX 肯定没有生成 DllRegisterServer 方法,所以 Regsvr32.exe 不起作用。 - Hans Passant
啊,好的,所以C++/CX有点像COM,但并不完全相同。在WinRT之外,C#应用程序不能轻松地引用它。 - Jeff
从理论上讲(因为它在底层是COM),它们可以通过COM可调用包装器在.NET中访问... - MFH
2个回答

8

不能在WinRT之外使用C++/CX - 它依赖于Windows运行时元数据,而非WinRT API没有元数据。


3
我认为他更倾向于用C++/CX编写自己的WinRT组件,然后从.NET WPF应用程序中引用该组件。除非WinRT投影仅适用于Metro风格的应用程序,而在桌面.NET中不可用,否则我认为这确实可以实现。 - Pavel Minaev
1
Pavel:你说得对,那应该可以。我以为他试图使用C++/CX来简化其他COM操作。 - Larry Osterman
2
谢谢 Pavel,这真是个巨大的打击。 C++/CLI 是桌面应用程序的互操作性解决方案,并且在 Metro 风格应用中已经被停用,而 C++/CX 则是 Metro 的互操作性解决方案,不允许在桌面上使用。 微软啊...给我们跨平台的 C++/CX 吧! - lightw8
@Pavel:我说过,在Metro应用程序之外,您无法激活第三方WinRT对象。这与元数据无关 - C++编译器不会在运行时加载元数据。 - Larry Osterman
1
抱歉,我以为这是关于C++/CX的问题。对于非第一方应用程序,CLR会查看包标识。我确实说过它不起作用。如果它起作用了,那就是一个我们需要修复的错误。 - Larry Osterman
显示剩余6条评论

3
是的,可以。WinRT和Win32是可互操作的,只是任何使用WinRT世界之外的内容的应用程序无法在应用商店售卖。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接