Как создать пользовательские элементы управления C # из c / cpp

Может кто-нибудь пролить свет на то, как создавать пользовательские элементы управления c # из vc? Мне нужно создать некоторые графические элементы управления, которые будут использоваться в проекте C #, такие как элементы управления по умолчанию, потому что производительность важна, и это на устройстве CE с низкой производительностью Windows, я думаю, я должен сделать это в c / cpp.

1

Решение

Вы можете попробовать написать полный элемент управления на C и предоставить очень тонкую оболочку, раскрывающую то, что вам нужно контролировать, скажем, на C #. Он не обязательно должен следовать модели UserControl или Control, если мы говорим об элементах управления Forms, что довольно сложно сделать правильно, и где все затраты идут на эти элементы управления. Это очень резко.

Вы также можете исследовать WPF, который пытается сделать больше на управляемой стороне, тем самым быстрее. Это имеет свои сложности. Он будет составлять / «разбивать биты», как правило, довольно интеллектуально сам по себе, но часто выходит за борт, но его путь быстрее (или может быть), чем элемент управления Forms с двойным буфером, который в итоге будет делать то же самое соединение в режиме двойного буфера, но медленнее с большим потоком обработки сообщений. (Чрезвычайно упрощенно)

Так что вместо того, чтобы просто сказать НЕТ, я думаю, что это ваши варианты. Опять же, можно управлять на расстоянии вытянутой руки, хорошо написанным C-рендером и приблизиться к нативному исполнению.

Редактировать:

Я пропустил часть вопроса о Windows CE. Виноват. Я не знаю, применимо ли то, что я сказал.

1

Другие решения

Простой, прямой ответ заключается в том, что вы не можете. Период. Compact Framework не поддерживает управляемый C ++ (C ++ / CLI). Теперь я полагаю, что вы могли бы создать компонент пользовательского интерфейса в качестве элемента управления COM, а затем вручную свернуть все компоненты интерфейса COM для управляемой стороны, но это было бы кошмаром для сборки, отладки и особенно развертывания.

Вам лучше просто перейти к небезопасному коду и использовать P / Вызывает Win32 API, которые вам нужны, прямо в коде C #. В большинстве случаев вы можете добиться того, чего хотите, и получить хорошие результаты. Если у вас есть что-то, что абсолютно необходимо сделать в C для скорости, то создайте библиотеку, которую вы передаете в буферах через P / Invoke. Библиотека изображений, например, использует этот тип механизма для создания миниатюр и т. Д.

2

Я предполагаю, что вы говорите о WinForms, а не Silverlight.

Вам не нужно.

.NET в Windows CE выполняет JIT CIL (в отличие от Micro Framework, который интерпретирует его, как в старой школе Java). Нет реального снижения производительности при написании элементов управления в C #. Самая дорогая операция — рисование, и если вы используете C # или C ++, то вы будете делать это с GDI, и это внутри вызовов функций GDI, где лежат дорогие операции, единственное, что вы сохраняете, это сортировка между Managed и Родные территории, но это действительно очень мало значит.

Единственная ситуация, когда вы могли бы использовать C ++ для создания графического интерфейса Windows CE, была, если вы работали с видео или анимационной средой (например, Flash), и если бы вы это делали, то вы использовали бы полностью C ++ и не использовали бы .NET для любого вашего графического интерфейса.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector