Оценка усилий: использование C / Win32 или изучение C # / .NET - PullRequest
3 голосов
/ 24 июня 2009

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

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

Что должна делать заявка:

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

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

Так зачем вообще думать о C # / .Net?

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

Пока мои соображения:

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

Моя основная задача - функциональность. Усилие вызывает беспокойство. Синтаксический анализ XML не является обязательным.

Пожалуйста, совет.

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

Ответы [ 8 ]

4 голосов
/ 24 июня 2009

, поскольку другие вопросы в основном освещают, я просто хотел бы быстро прокомментировать ваши соображения:

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

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

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

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

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

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

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

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

3 голосов
/ 24 июня 2009

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

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

Как сильно вы заботитесь о изучении новых вещей?

2 голосов
/ 24 июня 2009

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

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

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

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

1 голос
/ 24 июня 2009

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

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

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

1 голос
/ 24 июня 2009

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

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

1 голос
/ 24 июня 2009

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

1 голос
/ 24 июня 2009

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

1 голос
/ 24 июня 2009

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

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

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

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

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

...