【问题标题】:Is a WPF application managed code only?WPF 应用程序是否仅托管代码?
【发布时间】:2010-08-12 03:35:33
【问题描述】:

我想在应用程序中使用 WPF。我想用 C++ 编写它。是否必须管理应用程序?我知道我可以将托管与非托管混合使用。我想知道是否可以让整个应用程序不受管理。

【问题讨论】:

  • 为什么要写成非托管代码? WPF 建立在 .NET 框架之上,由设计管理。如果您确实需要,可以将非托管代码调用到互操作中。

标签: c++ wpf unmanaged managed


【解决方案1】:

您可以在非托管代码中轻松开发 99% 的 WPF 应用程序,但使其 100% 非托管是相当困难的。

WPF 类没有 Guid 属性,因此它们不能与 COM 一起使用。因此,使用 100% 非托管代码构造 Button 和 Window 等 WPF 对象需要非托管 CLR API 之一。 Hosting API 可能是最简单的,但仍然需要大量工作。

如果您愿意接受 99% 的非托管代码,只需使用 /clr 选项编译您的应用程序并使用 IJW 实例化 WPF 对象并调用 Application.LoadComponent 等方法。

另请注意,WPF 绑定到非托管对象要求这些对象完全支持 COM,包括 IDispatch。

【讨论】:

    【解决方案2】:

    如您所知,您可以通过互操作混合托管和非托管;但是,WPF 在 CLR 上运行。

    这是网络上的一篇文章,其中一些人推测未来的非托管版本:

    http://neilmosafi.blogspot.com/2008/07/unmanaged-version-of-wpf-coming.html

    这里是关于 WPF/native 互操作的附加参考,如果您选择走这条路线:

    http://msdn.microsoft.com/en-us/library/ms742522.aspx

    【讨论】:

    • 读者应该注意,您第一个链接中的推测是基于对 PDC08 会话的描述,结果证明是关于 MIL。在过去的两年里,我没有听到任何其他消息或任何其他关于 MIL 可能会成为公共 API 的猜测。即使是这样,它也不会是 WPF,因为 MIL 仅包含低级原语。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 2019-02-19
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多