【发布时间】:2010-08-12 03:35:33
【问题描述】:
我想在应用程序中使用 WPF。我想用 C++ 编写它。是否必须管理应用程序?我知道我可以将托管与非托管混合使用。我想知道是否可以让整个应用程序不受管理。
【问题讨论】:
-
为什么要写成非托管代码? WPF 建立在 .NET 框架之上,由设计管理。如果您确实需要,可以将非托管代码调用到互操作中。
我想在应用程序中使用 WPF。我想用 C++ 编写它。是否必须管理应用程序?我知道我可以将托管与非托管混合使用。我想知道是否可以让整个应用程序不受管理。
【问题讨论】:
您可以在非托管代码中轻松开发 99% 的 WPF 应用程序,但使其 100% 非托管是相当困难的。
WPF 类没有 Guid 属性,因此它们不能与 COM 一起使用。因此,使用 100% 非托管代码构造 Button 和 Window 等 WPF 对象需要非托管 CLR API 之一。 Hosting API 可能是最简单的,但仍然需要大量工作。
如果您愿意接受 99% 的非托管代码,只需使用 /clr 选项编译您的应用程序并使用 IJW 实例化 WPF 对象并调用 Application.LoadComponent 等方法。
另请注意,WPF 绑定到非托管对象要求这些对象完全支持 COM,包括 IDispatch。
【讨论】:
如您所知,您可以通过互操作混合托管和非托管;但是,WPF 在 CLR 上运行。
这是网络上的一篇文章,其中一些人推测未来的非托管版本:
http://neilmosafi.blogspot.com/2008/07/unmanaged-version-of-wpf-coming.html
这里是关于 WPF/native 互操作的附加参考,如果您选择走这条路线:
【讨论】: