На информационном ресурсе применяются cookie-файлы. Оставаясь на сайте, вы подтверждаете свое согласие на их использование.
C++ to Pascal??
        2960
                4
                
                
                    CooL/2
                
                
        
        guru
            Появилась необходимость, сконвертировать файлы *.h  в Паскаль. и назрели несколько вопросов, что есть что и где.
#define MAX_PORT_NAME 40
#define MAX_PORTS 16
Это в Си, а как это описать с Паскале????
Можно ли это описать как
Const
MAX_PORT_NAME=40; ??????
typedef struct _ACB { /* acb - Assoc. Control Block */
ULONG ulACBLen; /* length of structure */
ULONG ulObjType;
ULONG ulParm1;
ULONG ulParm2;
} ACB;
typedef ACB FAR *PACB; /* Ptr to an ACB */
Это есть TYPE или нет ???
Тоже самое что есть это в Паскале..
---
Возможно это покажется кому-то ламерством, мне все равно, последний раз писал на Це лет этак 10 назад, и соответственно не помню нифига....
    #define MAX_PORT_NAME 40
#define MAX_PORTS 16
Это в Си, а как это описать с Паскале????
Можно ли это описать как
Const
MAX_PORT_NAME=40; ??????
typedef struct _ACB { /* acb - Assoc. Control Block */
ULONG ulACBLen; /* length of structure */
ULONG ulObjType;
ULONG ulParm1;
ULONG ulParm2;
} ACB;
typedef ACB FAR *PACB; /* Ptr to an ACB */
Это есть TYPE или нет ???
Тоже самое что есть это в Паскале..
---
Возможно это покажется кому-то ламерством, мне все равно, последний раз писал на Це лет этак 10 назад, и соответственно не помню нифига....
Вроде,  должно быть так.
Const MAX_PORT_NAME=40;
MAX_PORTS = 16;
type _ACB=record
ulACBLen: Longint;
ulObjType: Longint;
ulParam1: LongInt;
ulParam2: LongInt;
end;
{ если в Delphi, то вместо longint - cardinal}
{ вообще говоря longint в Borlan Pascal - signed 32-bit, точно не скажу, но, возможно, могут быть проблемы}
Type PACB=^_ACB; { pointer to an ACB}
    Const MAX_PORT_NAME=40;
MAX_PORTS = 16;
type _ACB=record
ulACBLen: Longint;
ulObjType: Longint;
ulParam1: LongInt;
ulParam2: LongInt;
end;
{ если в Delphi, то вместо longint - cardinal}
{ вообще говоря longint в Borlan Pascal - signed 32-bit, точно не скажу, но, возможно, могут быть проблемы}
Type PACB=^_ACB; { pointer to an ACB}
Спасиб..В том-то и дело что не дельфи и не паскаль, а FreePascal под OS/2 )
    Все верно объяснил Маленький Федя.
По своему опыту, основные проблемы бывают с разнообразием целых типов. Надо вначале внимательно разобраться, где там 16-разрядные, где 32, и знак - не знак.
Главная проблема там - с массивами. С допускает динамические
массивы а эталонный паскаль- нет. Это все обходится, но приходится повозиться.
В Delphi сейчас есть поддержка динамических массивов прямо в языке. Возможно, в Вашем Free Pascal есть какие-то библиотечные средства.
    По своему опыту, основные проблемы бывают с разнообразием целых типов. Надо вначале внимательно разобраться, где там 16-разрядные, где 32, и знак - не знак.
Главная проблема там - с массивами. С допускает динамические
массивы а эталонный паскаль- нет. Это все обходится, но приходится повозиться.
В Delphi сейчас есть поддержка динамических массивов прямо в языке. Возможно, в Вашем Free Pascal есть какие-то библиотечные средства.
Одно замечание:
#define MAX_PORT_NAME 40
хммм, а это разве не замена MAX_PORT_NAME на число 40. Тогда const тут не пройдет, надо предварительно сканировать исходник и в "лоб" производить замену,
потому как замена может быть например , и такой
#define INPUT SCANF и в Си она должна работать (команда input будет вместо стандартной scanf)
    #define MAX_PORT_NAME 40
хммм, а это разве не замена MAX_PORT_NAME на число 40. Тогда const тут не пройдет, надо предварительно сканировать исходник и в "лоб" производить замену,
потому как замена может быть например , и такой
#define INPUT SCANF и в Си она должна работать (команда input будет вместо стандартной scanf)
ТОП 5
            2
                        
                    4