|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.10.2011, 06:37 | #11 |
Форумчанин
Регистрация: 06.10.2009
Сообщений: 121
|
Abstraction, нет ошибки. Но я не понял прикола.
Ищущий да обрящет
|
28.10.2011, 10:12 | #12 |
Форумчанин
Регистрация: 06.10.2009
Сообщений: 121
|
Посмотрел повнимательнее и кое-что понял, кроме одного: что это за приём, (...)(...) это что альтернативный вариант оператора присваивания? Когда заменил на = появилась та же ошибка. ЧТО МНЕ ДЕЛАТЬ?, уже второй день с этой ошибкой нимогу справиться первый раз такое. Подскажите пожалуйста.
Ищущий да обрящет
|
28.10.2011, 10:35 | #13 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Нет, идея была в том, что DriverObject->MajorFunction[IRP_MJ_CREATE] - это ссылка на функцию. Соответственно, я предположил, что, если есть проблема с соответствием типов, попытка вызова этой функции поможет получить более конструктивное сообщение об ошибке. Вместо этого компилятор этот вызов сожрал, как будто так и надо. Странно.
Чем чёрт не шутит, попробуйте написать Код:
Последний раз редактировалось Abstraction; 28.10.2011 в 10:36. Причина: поправка синтаксиса |
28.10.2011, 10:57 | #14 |
Форумчанин
Регистрация: 06.10.2009
Сообщений: 121
|
Abstraction, ни wstdcall, ни stdcall не помогло (компилятор на оба ругается), я этот код (где ошибки) не с потолка взял, это стандартный способ заполнения массива MajorFunction, массив этот входит в структуру PDRIVER_OBJECT, и служит для хранения указателей на функции драйвева обрабатывающие запросы ввода/вывода. Где ж загвоздка-то ё-моё.
Ищущий да обрящет
Последний раз редактировалось fredwriter; 28.10.2011 в 10:59. |
28.10.2011, 11:09 | #15 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
fredwriter,
А на __stdcall? Вообще, попробуйте найти заголовочный файл winnt_types.h и как в нём определён тип driver_dispatch_t. Я понимаю, что код не с потолка. Просто если не совпадают соглашения о вызовах, это может объяснить творящийся беспредел. |
28.10.2011, 11:48 | #16 |
Форумчанин
Регистрация: 06.10.2009
Сообщений: 121
|
Спасибо огромное, Abstraction, ваш __stdcall (Применяется при вызове функций WinAPI. Аргументы передаются через стек, справа налево. Очистку стека производит вызываемая подпрограмма) помог, объясните пожалуйста в чём тут фишка? Что это за __stdcall расскажите поподробнее.
И еще компилятор выдаёт два каких-то сообщения без указания на строку: 1. cannot find -lobjc 2. ld returned 1 exit status Это он уже давно выдаёт еще до исправления __stdcall. Аргументы передаются через стек, справа налево - то есть до того как я поставил соглашение вызова, аргументы передавались слева направо, а ожидалось наоборот для MajorFuncrion?
Ищущий да обрящет
Последний раз редактировалось fredwriter; 28.10.2011 в 12:01. |
28.10.2011, 12:11 | #17 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
При компиляции программы в машинный код, сами моменты вызова любой функции и возврата обратно превращаются в команды CALL и RET, в которые не заложено никакой функциональности по передаче аргументов. Соответственно, есть так называемые соглашения о вызовах - на какой стороне (вызывающий код, вызванный код) кто чего делает в дополнение к этим командам. Если вызывающий код будет думать, что вызываемый возьмёт аргументы с регистров, а вызванный будет вместо этого искать их в стеке, получится бардак. В данном случае, по всей видимости, компилятор без специального указания считает, что новые объявляемые функции по умолчанию должны быть cdecl, а поскольку driver_dispatch_t явно объявлен как stdcall, у него случился когнитивный диссонанс. Вероятно, можно с помощью директивы #pragma изменить поведение компилятора, чтобы он по умолчанию создавал функции с соглашением stdcall - как именно, надо читать в документации на конкретный компилятор.
Цитата:
|
|
28.10.2011, 12:34 | #18 |
Форумчанин
Регистрация: 06.10.2009
Сообщений: 121
|
Спасибо за информацию, Abstraction, что бы я без тебя делал? Наверное еще долго бы мучился.
Ищущий да обрящет
|
28.10.2011, 14:04 | #19 |
Форумчанин
Регистрация: 06.10.2009
Сообщений: 121
|
Не могу никак разобраться с этими ошибками:
1. cannot find -lobjc 2. ld returned 1 exit status Abstraction, вы говорили про подключение объектных файлов, подскажите пожалуйста как и где их подключать. Вот содержание моего MakeFile: Код:
Ищущий да обрящет
|
28.10.2011, 18:01 | #20 |
Форумчанин
Регистрация: 06.10.2009
Сообщений: 121
|
Нигде не могу найти информацию о том как исправить ошибки написанные в посте выше, Libraries компилятор берёт в папке Dev-Cpp\Lib (кстати у меня Dev-Cpp). Скачал какой-то архив objc-bootstrap-3.2.8, в нем есть файлы с именем _objc1.c, objc.in, objc1.c, но добавление в Libraries папки извлеченной из этого архива: C:\Dev-Cpp\objc-bootstrap-3.2.8\objc-bootstrap-3.2.8 не помогло, честно говоря я даже не понимаю что сделал, и что это за objc-bootstrap-3.2.8, просто название похожее. Подскажите пожалуйста кто-нибудь.
Ищущий да обрящет
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Непонятная ошибка | optimator | C++ Builder | 4 | 23.12.2010 17:20 |
непонятная ошибка | Mikuro | Помощь студентам | 0 | 12.11.2010 20:49 |
VS C++,непонятная ошибка | RFbager | Общие вопросы C/C++ | 4 | 31.10.2010 03:30 |
Непонятная ошибка. | jojahti | Общие вопросы C/C++ | 4 | 05.09.2009 20:39 |
Непонятная ошибка | RealSHELS | Общие вопросы Delphi | 16 | 24.10.2008 20:49 |