C++ или C# для программирования мобильного устройства штрихкода?

Я сделал это рекурсивным способом.

$arr = array(
        0 => array(
                    0 => 'one',
                    1 => 'two',
                    2 => 'three'
                    ),
        1 => array(
                    0 => 'sun',
                    1 => 'mon',
                    2 => 'tues'
                    ),
        2 => array(
                    0 => 'jan',
                    1 => 'feb',
                    2 => 'march'
                    )
        );

$new_arr = array();
$nb = count($arr);
$i = 0;
while($nb > 0){
    $nb--;
    $val1 = $arr[0][$i];
    $val2 = $arr[1][$i];
    $val3 = $arr[2][$i];
    $new_array[] = array($val1, $val2, $val3);
    $i++;
}

print_r($new_array);

Вы можете проверить это здесь http://sandbox.onlinephpfunctions.com/code/e9e87de78f7b9dbb6edc72340d60f8b31a77875f

7
задан Andy Dent 2 April 2009 в 10:12
поделиться

4 ответа

Я разрабатывал и разрабатывал программное обеспечение для Windows Mobile и Windows CE в C, C++ и C# в течение довольно многих лет теперь. Кроме того, я выполнение так для Honeywell (раньше Hand Held Products, купленная Honeywell в 2007), где я продолжил работать почти все аспекты устройств от драйверов и сервисов к графический интерфейсам пользователя Направления деятельности и утилитам.

В первую очередь, я не скажу Вам, что один язык лучше, чем другой... Я, вероятно, трачу 50/50 разделение своего времени с каждым, и каждая платформа определенно имеет их собственное место в мобильной разработке.

Я буду однако, давать предложение, чтобы Вы, вероятно, избегали любого устройства, которое выполняет ОС, столь же старую как WinCE 4.2, особенно если Вы даже рассматриваете разработку.NET. Обоснование для этого состоит в том, что 4.2 только имеет, самое большее.NET CF 1.0, встроенную в ROM (часть образа ROM ОС), означая, что Вы потребовали бы, чтобы ~5MB файл CAB установил, по крайней мере.NET CF 2.0, Да, Вы могли разработать с CF 1.0, но, действительно, это не стоит боли использования такой старой платформы. Большинство устройств WinCE 5.0 в эти дни идет с CF (Компактная Платформа) 2,0 установленных в ROM, таким образом, я, по крайней мере, искал бы это.

На том же самом тщетном можно даже хотеть рассмотреть использование устройства с Windows Mobile 6.0 или 6.1, как они легки к программе с и будут всегда предварительно устанавливать CF 2.0. В случае, если Вы задаетесь вопросом, почему я не упомянул CF 3.0 или CF 3.5, это просто, потому что первая Мобильная платформа, которая будет выпуском с теми версиями, будет Windows Mobile 6.5, которая еще не отсутствует. Хотя можно всегда устанавливать платформу, если Вы хотите (~8MB CAB).

Предоставленный, WinCE определенно дает Вам больше стиля "Windows" к своему GUI по его кузену Windows Mobile, так, чтобы был весь вопрос Вашего предпочтения программирования и что Ваши конечные пользователи хотят и нуждаются.

Относительно комментариев kgiannakakis к SDKs быть только вещью слой это просто не верно. Если у Вас есть надлежащий SDK, у Вас должен быть весь тот же доступ к любым устройствам или драйверам, что Вы были бы в C++, но с простотой C#. Например, Honeywell обеспечивает обширный SDK для всех наших устройств в C++, VB и C#, и часть C# SDK на самом деле имеет больше функциональности, чем часть C++. Вы никогда не должны будете делать P/Invoke с нашим кодом от C#.

Если Вы хотите смотреть на SDK, я говорю о, это в свободном доступе для загрузки здесь и имеет некоторые яркие примеры. По моему скромному мнению, я на самом деле рассмотрел бы обеспеченный SDK как более важный, чем аппаратные средства во многих случаях с тех пор, большую часть времени, аппаратные средства для устройств являются в значительной степени тем же. У них всех есть центральные процессоры ARM, WiFi, Bluetooth, Лазерные или основанные на изображении сканеры, и т.д. Хотя, я посмотрел на ссылку Меж-Mec, Вы отправили, и не похоже, что единица на самом деле имеет созданный в сканере... Вы использующий внешний сканер, сцепленный с устройством? Смотрите на предложение Honeywell, если Вы хотите здесь. У нас есть устройства с, вероятно, лучшим основанным на формирователе изображения сканером штрихкода в бизнесе, встроенном во все наши единицы. И у нас есть горное тело SDK (я должен знать, я записал многое из него). И SDK предоставляет.NET чрезвычайно доступ ко всем аппаратным средствам на устройстве. Хорошо... Я остановлю свою коммерческую цель теперь.

Что касается одного языка по другому... это действительно все зависит от того, что точно Вы хотите сделать.

Драйверы и сервисы не могут быть записаны ни в чем кроме Собственного компонента (Win32) C или C++. Таким образом.NET отсутствует для чего-либо как этот. C и C++ может абсолютно быть Вашим другом на мобильных устройствах с точки зрения хранения вещей легкий вес, так как Вам не нужна целая платформа.NET для выполнения добавления. Помните, у Вас есть максимум 32 МБ памяти для любого процесса (не включая DLLs.. это - другая лекция), поэтому, если Ваше приложение будет обработкой тонны данных, C++ может быть способом пойти.

Один из главных недостатков, которые я нашел к C и C++ в мобильных системах, однако, то, что создание GUI является путем тяжелее, чем это с.NET На самом деле, большинство приложений C++, которые я пишу, является абсолютно бездисплейным и не имеет никакого GUI вообще....NET, CF (еще) не имеет WPF и застревает с WinForms, но действительно легко взять. В значительной степени перетаскивание в разработчике. И также помните, как я упомянул прежде, что WinCE имеет совершенно другую парадигму GUI, чем Windows Mobile. Однако иногда путь Windows Mobile довольно хорош, так как он вынуждает Вас сохранить свои графический интерфейсы пользователя простыми и к точке.

Потребление памяти может быть выше при использовании.NET, но не всегда. Для одного имея устройство с версией CF Вы собираетесь использовать сохраненный в ROM, будет означать, что у Вас обычно больше не будет памяти используемой на приложении.NET по сравнению с эквивалентным приложением C++. В некоторых случаях.NET будет даже использовать меньше памяти. Например, приложение.NET по сравнению с приложением C++, которое использует MFC, может часто использовать меньше памяти, потому что приложение C++ должно загрузить платформу MFC (так как это уже не загружается ОС...). Кроме того, так как C# управляют, Вы будете часто заканчивать с меньшим количеством использования памяти, потому что сборщик "мусора" освобождает память, которую Вы, возможно, забыли делать в приложении C++.

Скорость выполнения на более современных устройствах обычно не отличается между двумя. Предоставленный, у Вас всегда будут небольшие части каждого языка, где каждый будет быстрее, чем другой, но.NET является достаточно сформировавшейся в этой точке, что скорость не является действительно беспокойством. Я запрограммировал чрезвычайно быстрые приложения с очень интерактивными, анимированными графический интерфейсами пользователя, которые выполнили очень хорошо на устройстве с 128 МБ RAM и ARM на 420 МГц ЦП. Я даже записал одно приложение, которое я должен был замедлить, потому что оно звонило в собственный DLL через P/Invoke, и часть.NET по существу беспокоилась.

Я никогда не видел проблем с ресурсом аккумулятора на одном языке по сравнению с другим. Но я конкретно никогда не тестировал на него также.

Я действительно думаю, что в конце это все еще сводится к SDK, который идет с Вашим предпочтительным устройством. Если это будет иметь плохую поддержку.NET затем, то Вы найдете Ваш сам выполнение большой дополнительной работы, заставляя все работать, в этом случае я пошел бы с C++. Но если это имеет большую поддержку.NET (как тот, я продолжаю работать), Вы окажетесь с намного меньшим количеством работы и вероятно получите задание, сделанное значительно быстрее.

Кроме того, помните, что это не просто SDK поставщика оборудования, которого необходимо принять во внимание. В то время как Вам нужен тот определенный SDK, поскольку каждое устройство отличается (т.е. SDK, я связался с, ранее не будет работать над тем, что устройство Меж-Mec) весь несвязанный с аппаратными средствами материал ОС является в значительной степени стандартным через плату, которая является, где Windows Mobile или Windows CE SDK от Microsoft входят. Их поддержка C++ довольно хороша, но они действительно продвигают все вещи.NET в эти дни, поэтому поскольку обновления сделаны к ОС, меньше обновлений сделано к SDK C++, и намного больше функциональности теперь полагается на использование.NET Не то, чтобы Вы не могли сделать этого в C++, это просто, что они не сделали большой работы для Вас, что они действительно делали в SDK.NET.

Хорошо... это было длинно, но я пытался вывести более прекрасные части своих лет опыта в одну вещь. Я надеюсь, что это имело смысл.

12
ответ дан 6 December 2019 в 11:53
поделиться

Ответ на Ваш вопрос имеет отношение к типу Вашего приложения. Если Ваше приложение главным образом вокруг общения с аппаратными средствами и только тонким слоем бизнес-логики, и Пользовательский интерфейс необходим, то C++ был бы лучшим выбором. Для взаимодействия со сканерами, необходимо говорить с драйвером. Это лучше и быстрее достигается с C++. SDK.NET на самом деле будет оберткой кода C++ с помощью тонны P/Invoke, который делает код, работающий меньше быстрее.

Если с другой стороны Ваше приложение требует значительного бизнес-слоя и/или Пользовательского интерфейса, то.NET (и конкретно C#) является более оптимальным вариантом. В этом случае повышения эффективности далеко взвешивают увеличение производительности C++.

Другим важным фактором является тип устройств, на которых приложение будет развернутым. Вы нацелены на устройства Windows Mobile только? Затем.NET является безопасной опцией. Для устройств Windows CE необходимо заняться расследованиями, предварительно установлена ли компактная платформа или нет. Кроме того, некоторые устройства Windows CE не могут поддерживать все пространства имен.NET.

Наконец, я рекомендую читать Мобильное Карманное руководство Архитектуры, которое является недавним документом об архитектурных решениях для мобильных приложений.

4
ответ дан 6 December 2019 в 11:53
поделиться

Я разрабатывал в течение приблизительно 15 лет. Приблизительно 5 лет в C++ и 3 года в C# (который в настоящее время является моим предпочтительным языком). В C++ я всегда использовал stdlib, и иногда повышайте.

Я сократил свое время разработки с одной третью, так как я переключился от C++ до c#. Это было сделано из-за нескольких вещей (ничто научное, просто мой opinons):

  1. .NET является более полной платформой и легче использовать, чем stdlib и объединенное повышение.
  2. C# имеет лучшую структуру, которые делают легче прочитать код других и кодировать.
  3. Поблочное тестирование в .NET является световыми годами от поблочного тестирования в C++, особенно с Resharper и xUnit (xUnit получил чистый синтаксис, resharper, позвольте нам, Вы тестируете определенные методы тестирования непосредственно внутри dev студия).

Я главным образом кодирую серверы, программирование GUI должно быть еще быстрее.

0
ответ дан 6 December 2019 в 11:53
поделиться

Сначала я сильно повторю рекомендацию Adam против выполнения чего-либо на основе CE.NET 4.2 в этой точке по по существу той же причине. В этой точке это - древняя версия ОС и если Вы не получаете терминал бесплатно, это не стоит того и если Вы принимаете решение сделать разработку C#, загрузка CAB для выполнения.NET 2 является просто болезненной.

Мы разработали много приложений и для устройств Motorola(Symbol) и для Меж-Mec. Текущий набор API для них обоих работает надежно, таким образом, я волновался бы больше о пригодности устройства, чем определенные API. Они также, которых оба обеспечивают разумным примерам программ, которые помогают вырезать и вставить решение.

Я заметил еще одну большую разницу между Motorola и Меж-Mec. На устройствах Меж-Mec я работал с (в C#), требуется приблизительно секунда для декодера для каждого символического обозначения, которое будет загружено. Это обычно не грандиозное предприятие, если Вы используете ограниченное количество символических обозначений и устанавливаете сканер в начале приложения, но можете вызвать значительные задержки при изменении декодеров (символические обозначения) в рамках приложения.

1
ответ дан 6 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: