Freeman пишет:Что на данный момент с библиотеками? Уже который год ходят разговоры о полном переходе на StrippedPE, есть даже какая-то Core.dll в этом формате... В консольных примерах из параллельной темы вижу всё тот же .obj, что и раньше. На практике пока ничего не изменилось?
Библиотеки пока MSCOFF.
Что касается Core.dll, "импортируемой" драйверами, то это означает, что драйверу необходимые функции предоставляет само ядро.
Вот тут список экспортируемых функций websvn.kolibrios.org/filedetails.php?re … p;rev=7168
Freeman пишет:Похоже, FastMM придется собирать каким-то хитрым образом, чтобы получить именно библиотеку.
Библиотеку, думаю, сделать можно. Ну вот, скажем, в качестве примера библиотеки MSCOFF для KolibriOS на С websvn.kolibrios.org/filedetails.php?re … p;rev=7894 просто нужен массив EXPORTS.
А просто так подключать не пробовал? Да, это увеличит, конечно, размер программы. Но всё же для теста, на период разработки хотя бы.
Если осталось сделать только библиотеку, а сам код готов — то это не должно быть сложно.
Добавлено 22.05.2020 в 22:44
Да, EXPORTS — в Delphi зарезервированное слово.
Но, к счастью, поддерживается не только "EXPORTS", но и "_EXPORTS".
Вот здесь в ядре происходит проверка этого символа websvn.kolibrios.org/filedetails.php?re … #line-1165
А вот тут определены эти строки websvn.kolibrios.org/filedetails.php?re … 1#line-155
Ну в общем вот
▼пример библиотеки на Delphi 7 для KolibriOS в формате MSCOFF, содержащей 3 функции: Sum, Mul и Sub
unit Test;
interface
function Sum(A, B: LongWord) : LongWord; stdcall; forward;
function Mul(A, B: LongWord) : LongWord; stdcall; forward;
function Sub(A, B: LongWord) : LongWord; stdcall; forward;
const
_EXPORTS: array[0..3] of record
ProcName: PChar;
ProcAddr: Pointer;
end = (
(ProcName:'Sum'; ProcAddr:@Sum),
(ProcName:'Mul'; ProcAddr:@Mul),
(ProcName:'Sub'; ProcAddr:@Sub),
(ProcName:Nil; ProcAddr:Nil)); // last two must be Nil
implementation
function Sum(A, B: LongWord) : LongWord; stdcall;
begin
Result := A + B
end;
function Mul(A, B: LongWord) : LongWord; stdcall;
begin
Result := A * B
end;
function Sub(A, B: LongWord) : LongWord; stdcall;
begin
Result := A - B
end;
end.
собирается это так
dcc32 -j Test.pas
omf2d Test.obj
link -edit Test.obj
теперь при открытии этого файла в KolibriOS с помощью приложения cObj
▼мы можем наблюдать названия наших функций, содержащихся в библиотеке
прилагаю ниже архив с этим примером
Добавлено 22.05.2020 в 23:18
Я тут внезапно понял, что с помощью Delphi можно создавать библиотеки MSCOFF из нескольких объектных файлов.
Как считалось ранее, например, вот здесь board.kolibrios.org/viewtopic.php?f=33& … 853#p66825
Siemargl пишет:Недостаток COFF библиотек - невозможно собрать из нескольких объектных файлов одну библиотеку
Но я сделал вот как:
добавил это
{$link unpacker.obj}
........................................
function unpack: longword; external;
........................................
(ProcName:'unpack'; ProcAddr:@unpack),
и в результате в библиотеке у нас уже 4 функции
уж не знаю, будет ли им там интересно это, но по крайней мере, теперь известен способ собирать библиотеки из нескольких файлов
Post's attachments
KolibriOS_Library.7z 564 b, 136 скачиваний с 2020-05-22

obj_in_obj.PNG 4.06 Кб, 78 скачиваний с 2020-05-22
test.PNG 35.66 Кб, 74 скачиваний с 2020-05-22