2009-06-24 1 views
3

Я намерен написать небольшое приложение, чтобы поцарапать личный зуд и, возможно, облегчить жизнь некоторым коллегам. Вот что у меня есть:Оценка усилия: использование C/Win32 или обучение C#/.NET

  • 10+ лет опыта в C
  • большой опыт в программировании против Win16/32 API в C от Win3.1 до 2000 дней.
  • C библиотека, написанная мною, уже делает около 75% того, что должна делать заявка.

Что приложение должно делать:

  • открыть бинарный файл, подача его в указанной библиотеке.
  • возьмите полученный текст и загрузите его в новую книгу Excel.
  • применять некоторые форматы.
  • прекрасно сочетается с средой Windows (наличие в «Open With ...», помните некоторые вещи, используя реестр и т. Д.)
  • (возможно, позже) перед передачей CSV-данных в Excel, проанализируйте его, просмотрев значение некоторых значений в файле XML.

За исключением части анализа XML, я сделал все это, прежде чем включать COM/Office Automation в C/Win32. Существует много кода шаблона, но он выполним, и результат будет довольно маленьким приложением без необходимости установки.

Так почему же даже думать о C#/.Net?

  • нет опыта с синтаксического анализа XML
  • обещание меньше шаблонного кода для вещей Windows, и Excel (да, я сделал C++ с OWL, MFC, ATL и т.д., но я не буду больше туда - не бесплатно/fun)
  • Поскольку у меня также есть опыт работы с C++, VB (не .Net) и небольшая Java/Objective-C, я думаю, что изучение C# будет связано с библиотеками .Net, а не с языком.

Мои соображения до сих пор:

  • Обучение .NET может быть интересно и может привести к снижению кода/первых шагов в более современной обстановке.
  • Придерживаясь того, что я знаю, приведет к прогнозируемому результату с точки зрения усилий и функций (за исключением необязательного материала XML)
  • VB отлично смотрелся в начале до тех проектов, где было выполнено около 80%, затем началась боль и DLL-кодирование в C. Я обеспокоен тем, что история может повториться, если я выберу .Net.

Моя основная цель - это функциональность. Усилия вызывают озабоченность. Разбор XML не является обязательным.

Прошу совета.

Обновление: Одна вещь, о которой я забыл прямо указать, заключается в том, что я также беспокоюсь о простом развертывании инструмента для моих сотрудников.С Win32 я вполне уверен, что могу придумать EXE-файл < 1Mb, который можно легко отправить по электронной почте и не требует установки. С .Net не так много. Могу ли я создать необходимый MSI или что-то еще в Visual Studio Express (бесплатно) или мне нужны сторонние инструменты?

+0

Я не уверен в создании msi в Visual Studio Express, но есть бесплатные альтернативы, которые позволяют создавать msi. Для многих приложений вам даже не нужен msi-файл, все, что вам нужно, это скопировать сам исполняемый файл, возможно, вместе с любыми пользовательскими файлами DLL, которые использует приложение. –

ответ

4

как и другие Ваши вопросы в основном покрыты, d так же, как быстро прокомментировать свои соображения:

  • Обучения .NET может быть интересно и может привести к меньшему количеству кода/первые шаги в более современных условиях.

Полностью согласовано. Это определенно весело, и обычно это приводит к уменьшению количества кода. Инвестиции, которые вы сейчас вносите, наверняка принесут вам пользу в будущих проектах. Это быстрее, чем программировать в .Net, чем в C. Не только это проще, но и безопаснее. Вы изолированы от многих ошибок программирования, общих для C, в основном связанных с неправильным управлением памятью. Вы также получаете очень полный управляемый API для работы с материалами, которые вам, как правило, нужно создавать самостоятельно.

  • Вставлять с тем, что я знаю, что приведет к предсказуемому результату с точки зрения усилий и функции (для дополнительного материала XML за исключением)

Следовательно, ваша нерешительность. :-)

  • VB выглядел великолепно в начале до проектов, где около 80% сделали, то боль начала и DLL кодирования C. Я опасаюсь, история может повториться, если я выбираю .Net. Моя основная цель - это функциональность. Усилия вызывают озабоченность. Разбор XML не является обязательным.

.Net - совершенно другой зверь от VB. Большинство вещей, которые вы не смогли бы сделать в VB или, по крайней мере, сделать их легко, поддерживаются .Net. Например, службы Windows для быстрой сборки .Net. Программирование сокетов также поддерживается, но причин для этого очень мало, так как у вас есть множество коммуникационных API с .Net. У вас есть веб-службы, .Net Remoting, управление MSMQ и совсем недавно WCF. Правильная многопоточность поддерживается .Net, в отличие от модели идиотской квартиры в VB. Если вам действительно нужно идти на низком уровне, вы также можете использовать указатели на C# внутри небезопасных блоков кода, хотя я бы никогда не советовал это делать.

Если вам действительно нужно делать что-то на C, то интеграция также относительно проста. Вы можете создавать COM-объекты и использовать interop для работы с ними из .Net. Вы также можете напрямую взаимодействовать с обычными DLL-файлами, используя DllImport. Использование www.pinvoke.net упрощает работу.

Когда я развивался в VB, иногда мне также приходилось возвращаться на C++, чтобы делать вещи, которые я не мог сделать в VB. Поскольку я начал программировать в .Net, единственными чрезвычайно редкими сценариями, которые мне нужно было бы вернуться на C++, было то, когда мне нужно было использовать устаревшие COM-компоненты, которые использовали типы, с которыми мне было трудно перемещаться через interop. Я бы не стал беспокоиться о том, что история повторяется.

+0

Я обожаю все ответы и удивляюсь скорости и качеству. Однако ваш ответ ближе всего к тому, что я искал, как вы определили, и затронул мои основные проблемы. Спасибо! – Sven

+0

Отличный ответ! :-) –

+0

Спасибо за комментарии! :-) –

1

зависит от цели. :-) Это зависит от того, хотите ли вы сделать это быстро или если вы хотите узнать что-то новое. Это зависит от того, будете ли вы единственным хранителем кода или если другие будут поддерживать его в будущем. Это зависит от того, насколько сложна ваша обработка xml и насколько сложна автоматизация COM.

Возможно, вы получите рабочее приложение быстрее, если вы сделаете это в C, чем в C#. И с тех пор, как у вас есть много необходимого материала, и вы хорошо знаете C.

Но этот проект кажется хорошим совпадением для C# и .Net. .Net имеет большую поддержку XML и COM-взаимодействия легко, но неуклюже в C# (гораздо лучше в следующей версии!). Поэтому, если вы заинтересованы в обучении C# и .Net, это будет хороший проект для этого.

Я бы определенно сделал это в .Net и, возможно, C# (но я предвзятый). Использование .Net, вероятно, приведет к созданию кода, который легче читать и поддерживать, а, скорее всего, легче писать. Поэтому, если вы заинтересованы в обучении C#, я бы предложил вам пойти на это!

Редактировать: Вы беспокоитесь о размере исполняемого файла, если вы его запишете в .Net. Я сомневаюсь, что это будет проблемой, поскольку большинство, если не все библиотеки, которые вы будете использовать для такого проекта, уже будут установлены на вашем компьютере. 1 Mb довольно большой для исполняемого файла .Net, для большого проекта.

+0

Вещь в обслуживании - отличный момент. Люди, которые, вероятно, наследуют код, используют .Net и Delphi для более старых вещей. – Sven

3

Если вы используете COM, вам может быть интересно использовать C# 4.0 вместо более ранних версий - недостатком является то, что он только в бета-версии. Но в основном это делает COM-материал несколько менее уродливым по разным причинам.

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

Насколько вы заботитесь о новых знаниях?

+0

Хороший вопрос. На самом деле я очень забочусь, но время, которое я могу потратить на этот проект, возможно, ограничено часом в день. Поэтому, если я хочу получить общий результат в этом году ... Прежде чем принять решение, я обязательно посмотрю C# 4.0 из угла COM. Спасибо! – Sven

1

Я думаю, вы должны использовать C#. С вашим опытом кривая обучения не будет слишком крутой. В конечном итоге код будет более чистым (и меньше), чем вы, вероятно, могли бы использовать с C/Win32. Вероятно, не будет проблемы с использованием существующей C-библиотеки с атрибутом [DllImport].

+0

Код библиотеки тривиальный и, вероятно, переписан на C# в течение 3-4 часов. Ценность заключается в знаниях, необходимых для чтения бинарного файла, который я собрал, опросив создателей и написав для него спецификацию. – Sven

2

Это звучит как идеальный проект для обучения C# & .NET.

Вы знаете, что вам нужно, чтобы получить базовый уровень понимания C# & .NET, который затем можно применить к материалам, которые вам нужно изучить.

Как говорит Руна, ключевым драйвером могут быть временные шкалы. Если это то, что вам нужно в спешке, то это может привести к его кодированию в C &, используя win32.

Извините, я не мог быть более определенным.

+0

Драйвер: до тех пор, пока инструмент не существует, я должен вызвать библиотеку через программу командной строки, выполнить поиск и заменить на вывод текста, импортировать его в Excel, применить некоторые формы и формулы и, наконец, перевести/найдите некоторые из значений вручную. Бинарный файл представляет собой файл трассировки. Excel-лист - это то, что я использую для анализа записанного сообщения (автофильтр и т. Д.). Так что, пока это приложение не существует, я должен делать это умственное рутинное дело каждый раз, когда у клиента возникает проблема. – Sven

+0

Я бы пошел с C#. – ChrisF

1

краткое уведомление об установке. .NET по умолчанию является xcopy-способным, поэтому вам не понадобится инсталлятор для использования exe. Отправьте его по почте (или со следующей версией.NET framework необязательно оставить его на сетевом ресурсе)

1

Вы можете посмотреть на создание гибридной системы, которая использует C++/CLI и C#. C++/CLI обеспечивает хороший мост между ними и позволяет легко разделить разные части системы между управляемыми и неуправляемыми мирами.

Не уверен, что проекты установки включены в бесплатные версии визуальной студии. Но вы можете использовать clickonce (входит в состав фреймворка) или WIX (инструмент создания MSI с открытым исходным кодом на основе XML).

1

обучения C# все будет о библиотеках .Net и не на самом деле о языке

Нет Есть много вещей, которые вы должны узнать о языке (делегаты, события, дженерики ...) а также он ориентирован объект и управляет памятью сама по себе да нет указателей :)

в любом случае C# и .NET прекрасно все, что вам нужно, это некоторые усилия, чтобы получить до скорости

+0

Делегирование, как в Objective-C, Generics, как в C++/STL ... Извините, я не представил весь фон. Я изучил программирование около 15 лет назад с Object (Turbo) Pascal на DOS и немного поиграл с ассемблером x86, а затем перешел на C++/OWL и только после того, как попал в C. VB, произошло еще позже ... Я был молод и нуждался деньги. ;-) – Sven

+0

Можно использовать указатели внутри небезопасного кода –

+0

да вы можете, но вы не используете небезопасный код каждый день :) –

Смежные вопросы