Тихонечко сползаю в сторону продуктов разработки Microsoft, а значит языка C++ и .NET технологии. То есть мне нравится C++ и программирование на нём особых проблем не вызывает.
Сама Visual Studio тоже уже особых проблем не вызывает и позволяет разрабатывать приложения с нормальной скоростью. Хелп, получше, чем у последних версий Codegear. Да MSDN является к тому же первоисточником для всех остальных хелпов и библиотек-обёрток над Win API.
Что меня останавливало “конвертированию” текстов и полному переходу на язык с двумя плюсами, так это отсутствие в стандартной поставке, да и вообще упоминания наличия в 3-х библиотеках такого удобного компонента из стандартных Delphi в их технологии MIDAS – TClientDataSet.
Ни один поисковик, ни форум не давал ответа, чем же можно заметить таблицу в памяти.
Но тут случайно или нет, Joel Spolsky жалуется на то, что фиг найдешь ответ на программиский вопрос и открывает новый сервис, stackoverflow.com и я там задаю соответствующий вопрос. Ответ получил быстро и он меня паразил: оказывается всё было рядом – в .NET и из чистого C++ можно использовать классы точка-нета, что для меня было открытием, т.к. здравая логика подсказывала, что с++ это максимум MFC+ATL, а если хочешь остальное – dbware компоненты и все остальные “удобные” компоненты и к тому же еще и дизайнер форм, как у дельфи, то пиши на C#, J#, VisualBasic и так далее.
Но оказалось, что достаточно включить опцию CLR в проекте и получаешь возможность использовать, как классы .net, так и их менеджер памяти и соответственно слежение за выделением и освобождением объектов.
Удобно. Я пошёл изучать классы дот-нет. Проверил работоспособность DataTable, понадобавлял обычные и вычислительные поля: фурыкает и с нормальной скоростью. Продолжил перенос классов дальше.
Наивный чукотский юноша.
Если отвлечься и вспомнить как я настраивал DCOM для работы дельфового MIDAS, то это было просто ужас – надо было вытаскивать некие “оснастки” через командную строку и делать для меня далеко нетрививальные вещи, притом уж чего я только не делал с windows до этого. После этого становится понятно почему эта технология не пользуется популярностью и не прижилась нигде, кроме как в продуктах самой же Microsoft.
Сложностей особых нет – надо всё сделать по инструкции на КАЖДОЙ машине и всё будет работать. В тот же момент стояла задача о разработке продукта для 89 регионов России и работать он должен был в гос.учреждениях. Применение же такой технологии привело бы к краху проекту, т.к. настроить DCOM на каждой машине, в каждом округе Российской федерации просто НЕРЕАЛЬНО. Мы (как разработчики) на места установки не поедем, а на местах настройкой и установкой комплекса обычно занимается тот же кто и пользуется им, т.е. неквалифицированный пользователь компьютера. 🙂
Так о чём это я… Таки беру я откомпилированное тестовое приложение и запускаю у себя – гуд. Всё фурыкает и работает. Копирую на сервер и пытаюсь запустить там через Remote Console – ошибка. Проблема раз: надо поставить vcredist_xYY.exe, где YY это или 86 или 64, что соответствует не разрядности установленной операционной системы, как подумалось изначально, а разрядности запускаемого приложения! Ну ладно, с кем не бывает, надо – так надо.
И это несмотря на то, что .NET третьей версии как бы стоит. Зачем потребовались еще библиотеки (DLL), как я понимаю, для работы с .NET объектами из С++ приложений? Почему нельзя статически прилинковать эти обвязки при создании приложения, тем более, что они должны быть в той разрядности, что и приложение?
Т.е. получается какое-то неравноправие: напиши я на C# и моя программа запустилась бы с полпинка, а если на C++, то надо еще что-то “доставить”. Бред. Но это решается тем, что в требованиях к программе можно указать, кроме необходимой версии .NET еще и наличие vcredist.
Пока я разбирался что да как, выползла вторая проблема: оказывается я не могу запустить программу с сетевого диска! Абалдеть. На своей же машине я её запускаю и даже могу отлаживать, а если его скопировать или даже скомпилировать на сетевой диск – то прав у меня недостаточно! А права-то у меня есть, т.к. скомпилированная программа без CLR великолепно запускается. Беда.
Читаю решение проблемы: надо выполнить тра-ля-ля на ВСЕХ компьютерах, с которых вы будете запускать данную программу!
Нет слов. DCOM вернулся.
Как объяснить пользователю ПК поневоле, что надо что-то выполнить в командной строке для того, что бы приложение заработало? Оно ему нужно? Он пойдет и купит программу у конкурента.