OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 01:29

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
СообщениеДобавлено: Вторник, 27 Июнь, 2006 16:39 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Написал програмку, которая из заголовочного файла "WinError.h" вытаскивает константы (числа и текст).
Затем она формирует вот такой модуль:
Код:
MODULE WinError;

  CONST
    ...
    ERROR_INVALID_PARAMETER_txt* = "The parameter is incorrect.";
    ERROR_INVALID_PARAMETER* = 87;
    ...

  PROCEDURE CodeToText* (code: INTEGER; OUT text: ARRAY OF CHAR);
  BEGIN
    CASE code OF
      ...
      | ERROR_INVALID_PARAMETER: text := ERROR_INVALID_PARAMETER_txt
      ...
    ELSE text := ""
    END
  END CodeToText;

END WinError.

длиной 8578 строчек...

Если кому интересно, то вот сгенерированный модуль WinError.odc (в Rar архиве): http://www.rsdn.ru:80/File/30795/WinError.rar (73Kb)
а вот сама програмка, которая его генерирует (в Rar архиве): http://www.rsdn.ru:80/File/30795/Headmap.rar (12Kb)

Кстати, обнаружилось, что в "WinError.h" есть несколько констант объявленных дважды (с разными значениями!!!).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Июнь, 2006 02:02 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Сергей Губанов писал(а):
Кстати, обнаружилось, что в "WinError.h" есть несколько констант объявленных дважды (с разными значениями!!!).


А потому что #ifdef и #if defined ;)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Июнь, 2006 10:52 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Ivor писал(а):
А потому что #ifdef и #if defined ;)


О! Точно, проглядел строчку:
#if defined(_WIN32) && !defined(_MAC)
По счастливому стечению обстоятельств не повезло только одной константе E_ACCESSDENIED* = 0080070005H.
Исправил.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 28 Июнь, 2006 16:37 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Упс... Обнаружил ошибку...


Последний раз редактировалось Сергей Губанов Среда, 28 Июнь, 2006 17:38, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 28 Июнь, 2006 17:37 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Исправил найденные ошибки и ещё написал програмку, которая вытаскивает из файла "WinBase.h" (это интерфейс к Kernel32.dll) несколько констант (477 штук, те, которые определены явно, а не ссылаются на другие *.h файлы) и 648 штук WINBASEAPI-процедур.

Результат выглядит как-то так:
Код:
MODULE WinBase ["Kernel32"];

  CONST
    INVALID_FILE_SIZE* = 00FFFFFFFFH;
    INVALID_SET_FILE_POINTER* = -1;
    INVALID_FILE_ATTRIBUTES* = -1;
    FILE_BEGIN* = 0;
    FILE_CURRENT* = 1;
    FILE_END* = 2;
    ...

  TYPE
    Pointer* = INTEGER;
    Handle* = INTEGER;
    Bool* = INTEGER;
    ...

  PROCEDURE GetFreeSpace* (x: INTEGER): INTEGER;
  ...
  PROCEDURE CreateFileA* (lpFileName: Pointer; dwDesiredAccess: INTEGER; dwShareMode: INTEGER; lpSecurityAttributes: Pointer; dwCreationDisposition: INTEGER; dwFlagsAndAttributes: INTEGER; hTemplateFile: Handle): Handle;
  PROCEDURE CreateFileW* (lpFileName: Pointer; dwDesiredAccess: INTEGER; dwShareMode: INTEGER; lpSecurityAttributes: Pointer; dwCreationDisposition: INTEGER; dwFlagsAndAttributes: INTEGER; hTemplateFile: Handle): Handle;
  ...
  PROCEDURE GetNumaAvailableMemoryNode* (Node: SHORTCHAR; AvailableBytes: Pointer): Bool;

END WinBase.

http://www.rsdn.ru:80/File/30795/WinBase.rar (10,6 KB)

До извлечения структур ещё не дошел (долго с аргументами функций возился) :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 30 Июнь, 2006 18:06 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Сергей Губанов писал(а):
До извлечения структур ещё не дошел (долго с аргументами функций возился) :D

Похоже, что выбранным мной методом дальше не пробиться :?, надо написать более-менее полноценный сканер с парсером заголовочных C/C++ файлов. Задачка, конечно, не тривиальная, но зато потом можно будет портировать dll-ки одним нажатием кнопки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 04 Август, 2006 13:16 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Сергей Губанов писал(а):
Сергей Губанов писал(а):
До извлечения структур ещё не дошел (долго с аргументами функций возился) :D

Похоже, что выбранным мной методом дальше не пробиться :?, надо написать более-менее полноценный сканер с парсером заголовочных C/C++ файлов. Задачка, конечно, не тривиальная, но зато потом можно будет портировать dll-ки одним нажатием кнопки.

Берется xds, запускается h2d, результат просматривается и используется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re:
СообщениеДобавлено: Среда, 11 Апрель, 2012 17:42 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 520
Откуда: Украина, Днепропетровская обл.
Неплохо для этих целей использовать утилиту H2O из поставки OO2C, она умеет и константы, и ещё намного больше: http://forum.oberoncore.ru/viewtopic.php?f=34&t=661. Реализована поддержка Компонентного Паскаля.

Вот начатая статья, в которой я планирую подробно описать процесс конвертирования сишных заголовков в интерфейсы для КП. Делюсь тем, что успел написать. Не критикуйте строго, лучше помогите довести утилитку до ума.

http://zx.oberon2.ru/lib/Oleg-N-Cher/exp_h2cp.zip


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB