OberonCore https://forum.oberoncore.ru/ |
|
Автоматическая конвертация заголовочных *.h файлов в *.mod https://forum.oberoncore.ru/viewtopic.php?f=2&t=264 |
Страница 1 из 1 |
Автор: | Сергей Губанов [ Вторник, 27 Июнь, 2006 16:39 ] |
Заголовок сообщения: | Автоматическая конвертация заголовочных *.h файлов в *.mod |
Написал програмку, которая из заголовочного файла "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 ] |
Заголовок сообщения: | Re: Автоматическая конвертация заголовочных *.h файлов |
Сергей Губанов писал(а): Кстати, обнаружилось, что в "WinError.h" есть несколько констант объявленных дважды (с разными значениями!!!).
А потому что #ifdef и #if defined |
Автор: | Сергей Губанов [ Среда, 28 Июнь, 2006 10:52 ] |
Заголовок сообщения: | Re: Автоматическая конвертация заголовочных *.h файлов |
Ivor писал(а): А потому что #ifdef и #if defined
О! Точно, проглядел строчку: #if defined(_WIN32) && !defined(_MAC) По счастливому стечению обстоятельств не повезло только одной константе E_ACCESSDENIED* = 0080070005H. Исправил. |
Автор: | Сергей Губанов [ Среда, 28 Июнь, 2006 16:37 ] |
Заголовок сообщения: | |
Упс... Обнаружил ошибку... |
Автор: | Сергей Губанов [ Среда, 28 Июнь, 2006 17:37 ] |
Заголовок сообщения: | |
Исправил найденные ошибки и ещё написал програмку, которая вытаскивает из файла "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) До извлечения структур ещё не дошел (долго с аргументами функций возился) |
Автор: | Сергей Губанов [ Пятница, 30 Июнь, 2006 18:06 ] |
Заголовок сообщения: | |
Сергей Губанов писал(а): До извлечения структур ещё не дошел (долго с аргументами функций возился)
Похоже, что выбранным мной методом дальше не пробиться , надо написать более-менее полноценный сканер с парсером заголовочных C/C++ файлов. Задачка, конечно, не тривиальная, но зато потом можно будет портировать dll-ки одним нажатием кнопки. |
Автор: | Димыч [ Пятница, 04 Август, 2006 13:16 ] |
Заголовок сообщения: | |
Сергей Губанов писал(а): Сергей Губанов писал(а): До извлечения структур ещё не дошел (долго с аргументами функций возился) Похоже, что выбранным мной методом дальше не пробиться , надо написать более-менее полноценный сканер с парсером заголовочных C/C++ файлов. Задачка, конечно, не тривиальная, но зато потом можно будет портировать dll-ки одним нажатием кнопки. Берется xds, запускается h2d, результат просматривается и используется. |
Автор: | Oleg N. Cher [ Среда, 11 Апрель, 2012 17:42 ] |
Заголовок сообщения: | Re: |
Неплохо для этих целей использовать утилиту H2O из поставки OO2C, она умеет и константы, и ещё намного больше: http://forum.oberoncore.ru/viewtopic.php?f=34&t=661. Реализована поддержка Компонентного Паскаля. Вот начатая статья, в которой я планирую подробно описать процесс конвертирования сишных заголовков в интерфейсы для КП. Делюсь тем, что успел написать. Не критикуйте строго, лучше помогите довести утилитку до ума. http://zx.oberon2.ru/lib/Oleg-N-Cher/exp_h2cp.zip |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |