Ошибки при сборке кода С

Тема в разделе "WASM.BEGINNERS", создана пользователем Llirik, 15 апр 2011.

  1. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Я Си практически не знаю, но тут мне пришлось подредактировать один исходничёк. В результате при сборке получил ошибки. помогите, пожалуйста, довести его до *.obj
     
  2. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Это разве плюсы? Это какое-то подобие плюсов.

    BOOLEAN - в плюсах bool.

    PDEVICE_OBJECT, NTSTATUS, PKEYBOARD_INPUT_DATA, PIRP и куча других типов - ты не объявляешь эти типы данных, а тянешь их из какой-то очень специфичной библиотеки.
    Код (Text):
    1. NTSTATUS
    2. KbFilter_InternIoCtl (
    3.     IN PDEVICE_OBJECT DeviceObject,
    4.     IN PIRP Irp
    5.     );
    Что за новый квалификатор типа IN? В плюсах только два квалификатора типа - это const и volatile.
    Скорее всего это какой-то убогий макрос, определённый в библиотеке, который пропадет (разрешится) при препроцессировании иначе бы такой код вообще не компилировался.
     
  3. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Хедеры WinDDK первый раз видим? Слово "WinAPI" ни о чем не говорит? Или тру-линуксоид?
     
  4. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Не соберется без WinDDK.
     
  5. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Ursus

    А давайте мы с Вами проведем весёлый эксперимент. Запустим ОСЬ на виртуалке - не обязательно Линуху, можно Фряху, можно QNX, главное не Винду - расширим горизонты.

    Вы там попробуете в любой функции в объявлении аргумента вбить квалификатор IN, например void myfunc(IN int value), и посмотрим, посмеёмся вместе над тем как компилятор отреагировал на это знаменательное событие. WinDDK вы там точно не подрубите, думаю будет весело.

    "IN" was not declared in this scope - кричит компилятор. Ура! Делаем вывод что тянется этот бодяжный макрос из либы специфичной для Винды и никому он даром не нужен.

    Один из вариантов как выкрутиться из такого неловкого положения определить макрос #define IN const, тогда gcc должен пропустить эту дьявольскую конструкцию:)
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.251
    Nafanya
    ты - идиот штоле? давай, давай, собирай виндовые дрова под линуксовые операционные системы) не знаешь о чем речь - лучше не пиши ничего... а про обозначения типов принятые в винде: тебя штоль не спросили?

    Llirik
    ну во-первых:
    во-вторых, что за ошибки?
     
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.549
    Адрес:
    Russia
    Nafanya
    Вы повеселись? И как? Понравилось компилить виндовые дрова в линуксе? Вы бы вначале - головой думали, что-ли.
    Кстати, заметьте, линуксовые дрова в винде никто не пытается собирать. Странно... А я бы хотел посмотреть. И желательно, чтоб собирали с помощью MS VS.
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.251
    и wine при этом использовать запрещено)
     
  9. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    TermoSINteZ
    MS VS настраивается на target-compilation, проекты делаются с Мэйкфайлами, сборка проекта после этого идет на удаленном целевом Линукс-сервере. Студию используют лишь как удобный редактор.

    Есть Linux Software Development, а есть Windows Software Development. Я второго не касаюсь,соответственно и сказать об этом ничего не могу ни хорошего, ни плохого. Разработка ПО под Линукс - другое дело.
     
  10. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    ничего не имею лично против Nafanya.
    но, может, стоит сначала изучить С, прежде чем разглагольствовать?
     
  11. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Ursus
    Что именно из курса Си вы рекомендуете мне изучить? Приведите пример того, что мне бы следовало знать из курса Си, а я не знаю. Если это будет важный момент, то я обязательно уделю ему внимание.

    Разбирать WinDDK, мне нет смысла, так как под ОС Windows я вообще ПО не пишу.

    Сейчас я изучаю паттерны проектирования - архитектурные конструкции, призванные разрешить часто возникающие проблемы проектирования.
     
  12. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Паттерны проектьирования - это очень круто.
    Но даже школьник, вчера начавший изучать С, в курсе, что такое "макрос", и почему конструкция

    Код (Text):
    1. NTSTATUS
    2. KbFilter_InternIoCtl (
    3.     IN PDEVICE_OBJECT DeviceObject,
    4.     IN PIRP Irp
    5.     );
    легко компилируется. BTW, мне лень лезть счас в сорсы едра Линуха, но я готов спорить на 100 баксов, что там есть аналогичные конструкции. Просто вместо макроса IN там есть, скажем, __in, или что-то вроде.
     
  13. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    плохо изучаете.
    какбэ пустые макросы IN\OUT это идиома позволяющая документировать назначение парамеров в коде
     
  14. GRRRLPower

    GRRRLPower New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2010
    Сообщения:
    46
    Где ты видишь в теме, что автор говорит о плюсах? Он пишет о простом Си, а в Си нет никаких bool.

    Из вообще очень специфичной, говорят, DDK какой-то, но никто не знает, что это такое. "IN - квалификатор" - это же новое расширение Си0x, ты не знал?

    А зачем же тогда пишешь глупые комментарии к коду, который представляет собой код для ядра Windows?

    Я уже помнится комментировал твой крутой код на C++... Вот важный момент - принять "IN" за какой-то квалификатор, и не подумать о том, что это просто макрос.

    Этот макрос служит для улучшения читаемости и понимания Си-кода. Есть же еще, например, OUT. Вот тут тоже кучи неведомых квалификаторов: http://msdn.microsoft.com/en-us/library/ff566424(v=vs.85).aspx :lol:
     
  15. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Всем спасибо за интересную и увлекательную дискуссию, вернусь к своим баранам, то есть к шаблонам проектирования:)
     
  16. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
  17. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    WinDDK естественно есть, а список ошибок есть в архиве в файле buildfre_wxp_x86.err.
    Вообщем суть такая: я эти функции перевёл на ассемблер и вроде бы правильно, потому что они работают (винда не вылетает), но работают не совсем. Вот я и хочу их собрать в изначальном виде на С и посмотреть, дело именно в них или надо что-то ещё добавить. Я, конечно, немного изменил структуру _DEVICE_EXTENSION, но не думаю, что дело именно в этом, хотя....
     
  18. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Вы, извините, программизъм изучали по комиксам, или - ?
     
  19. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Недавно я говорил на васме, что могу написать объект класса, который будет менять своё поведение в зависимости от состояния, в котором он находится. Думаю новичкам в Си++ и не только им, будет полезно взглянуть на то, как реализуется данная идея за счет применения динамического полиморфизма.

    Суть:
    Имеем объект класса Machine, предоставляющий внешний интерфейс DoOperation(int iOne,int iTwo).
    В зависимости от того, в каком состоянии находится объект класса сервис DoOperation будет выполнять различные действия. В одном состоянии он будет складывать два числа, в другом умножать, в третьем вычитать, но главное не в операциях, а в идее. Объект меняет своё поведение в зависимости от состояния. То есть при вызове одного и того же метода класса будут фактически выполнены различные операции. Это подчеркивает красоту и элегантность объектно-ориентированного подхода разработки ПО.

    Код (Text):
    1. #include <iostream>
    2.  
    3. using namespace std;
    4.  
    5. class Machine{
    6. public:
    7. Machine():_pState(&_theDefault){}
    8. int DoOperation(int iOne,int iTwo) {return _pState->DoOperation(this,iOne,iTwo);}
    9.  
    10. private:
    11. void SetNext(){_pState=&_theNext;}
    12. void SetDefault(){_pState=&_theDefault;}
    13. void SetEnd(){_pState=&_theEnd;}
    14.  
    15. class DefaultState
    16. {
    17. public:
    18. virtual int DoOperation(Machine* pMachine, int iOne,int iTwo) { pMachine->SetNext(); return (iOne+iTwo); }
    19. };
    20.  
    21. class NextState:public DefaultState
    22. {
    23. public:
    24. int DoOperation(Machine* pMachine, int iOne,int iTwo) {pMachine->SetEnd(); return (iOne*iTwo); }
    25. };
    26. class EndState:public DefaultState
    27. {
    28. public:
    29. int DoOperation(Machine* pMachine,int iOne,int iTwo) {pMachine->SetDefault(); return (iOne-iTwo); }
    30. };
    31.  
    32. DefaultState _theDefault;
    33. NextState    _theNext;
    34. EndState     _theEnd;
    35.  
    36. DefaultState * _pState;
    37. };
    38.  
    39.  
    40. int main()
    41. {
    42. int iValue1, iValue2;
    43. Machine themachine;
    44. for (int i=0;i<3;i++)
    45. {
    46. cout<<"Enter two values:"<<endl;
    47. cin>>iValue1;
    48. cin>>iValue2;
    49.  
    50. cout<<themachine.DoOperation(iValue1,iValue2)<<endl;
    51. }
    52.   return (0);
    53. }
     
  20. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Nafanya
    То что вы написали является конечным автоматом и нечего необычного в этом нет. Лучше изучайте программирование, а не пишите баяны.