繁体   English   中英

如何从c / cpp创建C#自定义控件

[英]How to create C# custom controls from c/cpp

有人可以说明如何从vc创建c#自定义控件吗? 我需要创建一些图形控件,这些控件将在C#项目中使用,就像默认控件一样,因为性能很重要而且它位于低性能的Windows CE设备上,我想我必须在c / cpp中完成。

简单明了的答案就是你做不到。 期。 Compact Framework不支持托管C ++(C ++ / CLI)。 现在我假设您可以将UI组件创建为COM控件,然后为管理端手动滚动所有COM接口,但这将是构建,调试和特别部署的噩梦。

你最好只是放弃不安全的代码并使用P / Invokes到你在C#代码后面的Win32 API。 对于大多数事情,你可以实现你想要的并获得良好的性能。 如果你有一些绝对必须在C中完成的速度,那么创建一个你通过P / Invoke传入缓冲区的库。 例如,成像库使用这种类型的机制来创建缩略图等。

您可以尝试在C中编写一个完整的控件,并提供一个非常薄的包装器,从C#中公开您需要控制的内容。 如果我们讨论的是Forms控件,它并不一定需要遵循UserControl或Control的模型,这对于正确的操作来说有点复杂,并且所有成本都用于这些控件。 它非常苛刻。

您还可以调查WPF,它试图在托管端完成更多工作,因此更快。 它有其自身的复杂性。 它通常会相当集中地复合/“bitblit”,但经常过分,但它的方式比双缓冲区Forms控件更快(或可能),最终它将在双缓冲模式下执行相同的复合,但随着更大的虚假胜利消息处理速度变慢。 (严重过分简化)

所以,不要只是说不,我认为这些是你的选择。 同样,可以控制臂长,精心编写的C侧渲染并获得接近原生的性能。

编辑:

我错过了Windows CE部分的问题。 我的错。 我不知道我说的是否适用。

我假设你在谈论WinForms而不是Silverlight。

你不需要。

Windows CE上的.NET执行CIL的JIT(与解释它的Micro Framework不同,就像老式Java一样)。 在C#中编写控件没有真正的性能损失。 最昂贵的操作是绘画,如果你使用C#或C ++,那么你将使用GDI进行此操作,并且它在GDI的函数调用中,昂贵的操作位于其中,你唯一能节省的是Managed和Eaged之间的编组。原住民的领土,但这确实很少。

您可能希望使用C ++创建Windows CE GUI的唯一情况是,如果您正在使用视频或动画框架(如Flash),如果您这样做,那么您将完全使用C ++而不使用.NET对于任何GUI。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM