Забыл добавить. В пингвине для защиты православного ядра от некошерного С++ многие структуры имеют поля с названиями new, public, private и т.п., чтобы вражеский С++-ный компилятор ну уж точно подавился. В итоге, приходится окружать инклуды идиотскими workaround-ами а-ля:
#define private _private
#define new _new
#include"related_linux_headers.h"#undef new
#undef private
Здравствуйте, пыщьх, Вы писали:
П>Здравствуйте, legogogo, Вы писали:
L>>На чём обычно пишут драйвера под винду на Си или C++? П>Некоторые (не будем показывать пальцем) до сих пор пишут на ассемблере.
Здравствуйте, legogogo, Вы писали:
L>На чём обычно пишут драйвера под винду на Си или C++?
В силу исторических причин, обычно на Си. Но есть ряд библиотек, позволяющих писать на С++. Например, уже покойная numega driver studio или моя BazisLib.
Аргументы сторонников C обычно сводятся к тому, что С++ медленнее, хотя конкретных примеров никто не приводит. В итоге, многие драйвера состоят чуть менее чем полностью из копипасты реализации "стандартной" функциональности (например, обработка состояний PnP-устройства в WDM).
Здравствуйте, bazis1, Вы писали:
B>Забыл добавить. В пингвине для защиты православного ядра от некошерного С++ многие структуры имеют поля с названиями new, public, private и т.п., чтобы вражеский С++-ный компилятор ну уж точно подавился. В итоге, приходится окружать инклуды идиотскими workaround-ами а-ля:
Чесно говоря не вижу смысла писать под Linux дрова на C++, так как стандартные библиотеки Си и C++ не используются, придётся постоянно писать extern "c" {}, будет ли оно работать стабильно тоже вопрос...
Под виндой та же ситуация со стандартной библиотекой Си, можно использовать только функции из ядра и никаких stdlib.h?
Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы (c) Алан Кокс
Здравствуйте, legogogo, Вы писали:
L>Здравствуйте, bazis1, Вы писали:
B>>Забыл добавить. В пингвине для защиты православного ядра от некошерного С++ многие структуры имеют поля с названиями new, public, private и т.п., чтобы вражеский С++-ный компилятор ну уж точно подавился. В итоге, приходится окружать инклуды идиотскими workaround-ами а-ля:
L>Чесно говоря не вижу смысла писать под Linux дрова на C++, так как стандартные библиотеки Си и C++ не используются, придётся постоянно писать extern "c" {}, будет ли оно работать стабильно тоже вопрос...
L>Под виндой та же ситуация со стандартной библиотекой Си, можно использовать только функции из ядра и никаких stdlib.h?
STLPort под оба кернела заводится без проблем.
PROFIT!! начинается, когда пишется более одного драйвера. Тогда вместо копипасты и ручной инициализации хреновой тучи таблиц можно сделать набор библиотечных классов в виртуальными методами и пронаследовать конкретные реализации от них. Сравните реализации HandleStopDevice() в примерах bulkusb и isousb. Копипаста 99%. В случае с C++ это была бы общая библиотека и класс а-ля:
class CBulkUsbDevice : public BasicUSBDevice
{
NTSTATUS HandleStopDevice(...) override
{
DoSomethingSpecific();
return __super::HandleStopDevice(...)
}
}
На чистом C пришлось бы городить руками таблицы функций, включение структур и приведение типов.
Здравствуйте, bazis1, Вы писали:
B>STLPort под оба кернела заводится без проблем.
Интересно.
А есть какой нибудь документ гв сети где перечислены нововведения в windows api в Windows 7? В сравнении с Vista в семёрке много нововведений, разных механизмов, функций и т.д. и что в семёрке устарело?
Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы (c) Алан Кокс
Здравствуйте, legogogo, Вы писали:
L>Здравствуйте, bazis1, Вы писали:
B>>STLPort под оба кернела заводится без проблем.
L>Интересно. L>А есть какой нибудь документ гв сети где перечислены нововведения в windows api в Windows 7? В сравнении с Vista в семёрке много нововведений, разных механизмов, функций и т.д. и что в семёрке устарело?
Я не в теме. Из интересного — IoSetIoPriorityHint() и иже с ними. Спросите в профильной конфе.
Здравствуйте, legogogo, Вы писали:
L>На чём обычно пишут драйвера под винду на Си или C++?
Некоторые (не будем показывать пальцем) до сих пор пишут на ассемблере.