С++
SC_HANDLE scm = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
// Функция установки драйвера на основе SCM вызовов
BOOL InstallDriver( SC_HANDLE scm, LPCTSTR DriverName, LPCTSTR driverExec )
{
SC_HANDLE Service =
CreateService ( scm, // открытый дескриптор к SCManager
DriverName, // имя сервиса - Example
DriverName, // для вывода на экран
SERVICE_ALL_ACCESS, // желаемый доступ
SERVICE_KERNEL_DRIVER, // тип сервиса
SERVICE_DEMAND_START, // тип запуска
SERVICE_ERROR_NORMAL, // как обрабатывается ошибка
driverExec, // путь к бинарному файлу
// Остальные параметры не используются – укажем NULL
NULL, // Не определяем группу загрузки
NULL, NULL, NULL, NULL);
if (Service == NULL) // неудача
{
DWORD err = GetLastError();
if (err == ERROR_SERVICE_EXISTS) {/* уже установлен */}
// более серьезная ощибка:
else printf ("ERR: Can’t create service. Err=%d\n",err);
// (^^ Этот код ошибки можно подставить в ErrLook):
return FALSE;
}
CloseServiceHandle (Service);
return TRUE;
}
Руслан Шевченко 5 час. назадЮнит тесты, детальная проектная документация и митинги важны там где бюджет вообще не ограничен. Все это сделано более для того, чтобы контролировать индусов.
Господа, можно провести небольшой опрос, по поволду вброса gaperton: gaperton.livejournal.com/32772.htmlКак у вас в проектах обстоят дела с проектной документацией?
Лично я пишу документацию сразу в коде, пока никто не жаловался.
TheRealAnonymous 2 час. назад
> юнит-тест тестирует юниты (а юнит это чаще всего метод)Цікаво, що заважає написати тест, який тестує те, що треба, а не обов’язково лише один метод, об’єкт, чи клас?
Цена? Заказчику важно побыстрее и подешевле. А на разработку хорошего юнит-теста, а не просто для галочки, нужно затратить больше чем на написание самого рабочего кода.
anonymous 4 мин. назад
Тоесть разве что отбросив интегрированный менеджер кеша, графической подсистемы и безопасности, то все остальное в NT соответствует микроядру.
А если у бабушки был бы...Вот когда отбросят, тогда и будет микроядерное. Пока что оно таким не является. Что Вам не понятно?
Формально не является, но предоставляет основные преимущества микроядра. Так же как Oracle формально уже не реляционная СУБД это нечто «вещь в себе».
anonymous 1 час назадБерем википедию:Я не собираюсь объяснять по 10 раз очевидные вещи. Прочитайте хотя бы на википедии что такое микроядро. Система не может быть «немножко микроядерной», как и женщина «чуть-чуть беременой».
Тоесть разве что отбросив интегрированный менеджер кеша, графической подсистемы и безопасности, то все остальное в NT соответствует микроядру. И систем чистых по теории не бывает, как не бывает, к примеру, чистых реляционных баз.
anonymous 15 мин. назадНу почему монолит? Графическая система (и то только обычный 2D GUI без 3D), менеджер памяти/кеша (именно там они там объединены и кеширование и управление памятью), io-менеджер, менеджер безопасности, планировщик — это все что монолитно и неотделимо от системы.Микроядерной была только 3.51я, остальные можно называть как угодно, придумывать красивые маркетоидные термины вроде «гибридная», но по факту это обыкновенный монолит, где даже графическая подсистема работает в пространстве ядра.
Хотя из-за идиотской или наоборот продуманной MS фичи при возникновении любой необработанной ошибки в режиме ядра (например, деления на 0) система автоматически останавливается. Для этого даже специальная функция есть KeBugCheck:) Удобно это тем, что во время отладки внешним отладчиком (через VMWare с виртуальные com-портом или через реальный IEEE1394) можно сразу оттрассировать место возникновения бага.
Хз чем «лучше», но К.О намекает, что define — это простая текстовая подстановка, а шаблоны — тьюринг-полный метаязык. Поэтому мне и стало интересно, как товарисч собрался на нем в компайл-тайм факториалы вычислять, а то может я чего-то про define не знаю.Я тогда не совсем точно понял задачу. Дейсвительно факториал на define вычислить нельзя, так как там невозможна рукурсия. Но я бы в данном случае вместо template все таки использовал define с константой данного факториала, так как код становится более контролируемым (и в исходник включаются только испольуемые значения, а не вся развёртка рекурсивного template), например при записи константы сразу видно требуемая разрядная сетка для ёё хранения, а вот в случае в template возможны «удивления».
Не заметил пост, поэтому отвечу сейчас. Во первых С++ я использую довольно редко только в том случае когда требуются, как и Java, как и PHP. Основной мой язык Delphi.
Даже боюсь спросить, что Вы там в этом драйвере такого пишете. Кодогенераторы на boost: spirit?
Да нет. Намного удобнее объект устройства обернуть в объект С++ в nonpaged pool памяти и работать по человечески. Если думать не как извратится на чистом С++, а как извлечь преимущества от использования С++ то довольно удобно. Комбинация объектного и процедурного удобнее чем просто процедурное программирование. Скорее всего там даже не С++, а «C with class».
В 21 веке в недрах Редмонда изобрели микроядерность? Я плакалЪ.
Может Вам лучше просветиться хоть одной нормальной книгой об ОС?
А то еще пару сообщений и Вы оконачтельно развеете остатки «коньячного» аромата псевдоэлитизма вокруг опытных (я так понял Вы себя как такового позиционируете?) плюсатнеков.
NT- и раньше была близка к микроядерности (точнее архитектуру NT-драйверов можно назвать плагинной, где драйвер плагин IO-менеджера) Просто раньше драйвера могли работать только в kernel-mode, а сейчас прикрутили нативный шлюз (коммерческие были и до этого WinDriver и пр...) в user-mode для некоторых драйверов.
anonymous 2 час. назадЕсли вы про этот изврат
Если вы про константы вычисляемые во время компиляции то там используются #define с параметрами, а не template (тоесть не шаблоны, а макроподстановки).Внезапно. А почему Вы решили, что для этого нельзя использовать темплейты? Вообще лучше Вы приведите пример вашего #define факториала, а то мне кажется, что мы друг друга недопонимаем:)
То за такое я бы сразу увольнял с печатью в паспорт «Бу-га-га-кодер». Вот такой С++ явно никому не нужен.
anonymous 2 мин. назад
ну не вижу причин чем template лучше обычной инлайновой функции?
Вы таки хотите подпортить репутацию крестовикам:)Подумайте на досуге что значит «компайл-тайм» в моем предыдущем посте и когда будет выполнятся «инлайновая» функция.
Если вы про константы вычисляемые во время компиляции то там используются #define с параметрами, а не template (тоесть не шаблоны, а макроподстановки). Или что именно вы хотите сказать? Можете привести пример?
anonymous 26 мин. назад
Бакалавр IT. Прочитано: одна толстая и не плохая книга по C, книга по С++, книга по WinAPI. Практики мало. Достаточно для junior?Важно только то, что «выучено», а не что «прочитано». Нагугли какой-то фак по крестам, обычно вопросы задают из него (вроде «зачем нужны виртуальные деструкторы? »). Как максимум разберись как делать всякие там компайл-тайм факториалы на темлейтах, такие «вредные» вещи почему-то являются объектом поклонения и признаком немеряной крутизны у некоторых пристарелых крестодрочеров.
Чего вы прицепились к темплейтам. Очень удобная вещь если использовать из многолетне протестированных библиотек или использовать в своём коде с частотой использования goto. С++ удобнее не темплейтами, а тем что можно, например переопределить менеджер памяти для определённого объекта на свой через переопределение операторов new delete. А факториал... ну не вижу причин чем template лучше обычной инлайновой функции?
На счёт ядер системы не знаю, там может быть и оправдано применение чистого С, так как в ядро лезут только профи уровня сеньёра. Но драйвера с использованием С++ вместо С выглядят намного аккуратнее. Почитайте новую инициативу Microsoft которая наконец-то решила использовать С++ и объектный подход для написания драйверов KMDF и UMDF (здесь драйвер работает на пользовательском уровне (на уровне ядра прокси-драйвер) так что возможно его написание даже на C#, хоть и не рекомендуется).anonymous 15 час. назад
Хотя по поводу Delphi вы правы, оно до сих пор довольно широко используется, не смотря на все старания Borland и Codegear добить свой продукт.
Они помогают только в самых простых случаях, когда все можно построить однозначное соответствие между входными и выходными данными.Мусье слышал о юнит-тестах?
Вот как вы построите юнит тест на обход определённого бага который встречается на 1% систем пользователей из-за конфликта с определённым ПО? Конечно можно сказать вот у нас есть технические требования к системе и идите гуляйте у которых их нет, но это утрата клиентов.
anonymous 2 час. назадАналога плюсам в высоконагруженном программировании (критичном к ресурсам) или системном программировании пока нет.
Таких вакансий, как «C++ junior» сейчас мало, потому что на крестах, слава Патрику, пишут все меньше и меньше софта общего назначения. Так что это будет либо джуниор в гейм-дев, либо в эмбеде, либо в чем-то таком.
4) просто нравится философия С++.
Ambianx 3 час. назадДля джониора в C++ — 3 года опыта написания программ на с++ или год в С++ и 5 лет в другом языке.
Просьба к знающим людям сформулировать примерный список требований для C++ junior. Просьба предварительно указывать свой реальный опыт работы в IT, чтобы было понятно, от кого исходит совет.
У С++ -ника никогда нет проблем с работой (и оплатой) даже во время кризиса, но это один из самых сложных стартов.
Хотя перехват SEH не поможет если баг в CRT-библиотеке, тогда только _set_invalid_parameter_handler в коде C++ на свой хендлер обработки ошибок.
TheRealAnonymous 20 час. назад
> Доречі ще одна причина чому GNU opensource “рулить” — гавнокод вічний супутник комерції, а от проект “для душі” навіть досить значний за обсягом — який сенс розробляти не якісно?Дійсно, 99.99% оупенсорса — дуже якісні і повноцінні програми, якже. Комерційні конкуренти тихо кусають лікті в сторонці.
Основное преимущество коммерческих — в удобстве для пользователей-казуалов. Вот, например, даже мне иногда приятнее настройки произвести мышкой, чем ковырять конфиги и читать документацию. А все GNU пишется для программистов (для себя), не для пользователей (клиентов). Хотя если использовать в качестве библиотек, то чаще всего даже лучше по качеству коммерческого кода
Артём Грошевой 2 час. назадПрочитал недавно Фаулера «Рефакторинг» и мне перестало становиться стыдно. Я просто изменяю код, пока он мне не начнёт нравится)
Это все понятно. Здесь другое. Если заказчику все нравится, а тебе в архитектуре нет, но видно, что можно улучшить, то здесь как быть?
roadking 4 час. назадЕсли Delphi то могу дать ссылку на враппер Gecko (Firefox). Для C++ всё есть на их сайте.
написал html редактор основываясь на компоненет WebBrowser
всё классно, но толко вот в html все таги большими буквами
хотя в сам редактор я загружаю html страницу, у которой все тэги написаны маленькими буквамиКак решить порблемму?
С тем же IE имел много проблем от совместимости версий до просто багов в документации MSDN. А Gecko можно таскать с собой, он небольшой, всего 7 мб.
Разницу между сервисом и приложением с невидимым главным окном понимаете?