В частности
Code: Select all
struct TSize{
union{
struct{
unsigned short Height;
unsigned short Width;
};
unsigned long Value;
};
};
Code: Select all
TSize = Packed Record
Height: Word;
Width: Word;
End;
Си-шные же компиляторы структуры в регистре не возвращают.
Было проверено в компиляторах Borland C++, Open Watcom, GCC, MSVC.
В стандарте я ничего не нашёл по этому поводу.
В KolibriOS.lib не так много функций, возвращающих значения в структурах, вот они:
Code: Select all
Function GetKey: TKeyboardInput; StdCall; External 'KolibriOS';
Function GetSystemTime: TSystemTime; StdCall; External 'KolibriOS';
Function GetScreenMax: TPoint; StdCall; External 'KolibriOS';
Function GetLastDrawnBackgroundRect: TRect; StdCall; External 'KolibriOS';
Function GetButton: TButtonInput; StdCall; External 'KolibriOS';
Function GetSystemDate: TSystemDate; StdCall; External 'KolibriOS';
Function GetMousePos: TPoint; StdCall; External 'KolibriOS';
Function GetWindowMousePos: TPoint; StdCall; External 'KolibriOS';
Function GetMouseScroll: TPoint; StdCall; External 'KolibriOS';
Function GetBackgroundSize: TSize; StdCall; External 'KolibriOS';
Function GetScreenWorkingArea: TRect; StdCall; External 'KolibriOS';
Function GetSkinMargins: TRect; StdCall; External 'KolibriOS';
Function GetScreenSize: TSize; StdCall; External 'KolibriOS';
Code: Select all
Function GetScreenWorkingArea: TRect; StdCall; External 'KolibriOS';
Function GetLastDrawnBackgroundRect: TRect; StdCall; External 'KolibriOS';
Function GetSkinMargins: TRect; StdCall; External 'KolibriOS';
Сначала пример для Borland C++
Необходимые инструменты
Code: Select all
BCC32 — компилятор Borland C++
LINK — линкер от Microsoft
LD — GNU линкер
OBJCOPY — утилита для преобразования объектных файлов
Code: Select all
Set NAME=test
BCC32 -c %NAME%.c
LINK -edit %NAME%.obj
LD -T LScript.x %NAME%.obj -o %NAME%.kex -L %KolibriOS% -l KolibriOS
OBJCOPY -O binary -j .all %NAME%.kex
LScript — линкер-скрипт для GNU-линкера LD
В результате получаем окно с выведенным в него текстом: