Почему PAINTSTRUCT в C является TpaintStruct в PASCAL? - PullRequest
1 голос
/ 13 ноября 2011

Я просматривал приложение, переносимое из C в PASCAL (win32 API), и не могу понять, почему тип PAINTSTRUCT в C изменяется на TpaintStruct в PASCAL.

Вот фрагменты, где это можно увидеть:

long FAR PASCAL ClientWndProc(HWND hwnd, UINT msg, UINT mp1, LONG mp2)
{
    static int cxClient, cyClient;
    HBITMAP hbm;
    BITMAP bm;
    PAINTSTRUCT ps;
    ...

превращается в

function ClientWndProc(hwnd: WinTypes.HWND; msg: Word; mp1: Word; mp2: Longint): Longint; export;

var
    hdc: WinTypes.HDC;
    hdcMem: WinTypes.HDC;
    hbm: WinTypes.HBITMAP;
    bm: TBITMAP;
    ps: TpaintStruct;
    ...

Мне нужно самому портировать одно приложение. То же самое относится и к типу TEXTMETRIC? Должен ли я назвать это TtextMetric в PASCAL?

Ответы [ 3 ]

3 голосов
/ 13 ноября 2011

Delphi (и Turbo Pascal до него, IIRC) всегда имели обычай префиксов типов с T, как в TStringList, TButton, TCustomForm, TDateTime и т. Д.

Вы можете найти TTextMetricTPaintStruct), объявленные для вас уже в модуле Windows.pas, наряду со многими стандартными функциями WinAPI.

(WinTypes устарела, посколькуЭто старый перенос Delphi 1 для 16-битных приложений, который автоматически заменяется Windows в более поздних версиях Delphi.)

1 голос
/ 14 ноября 2011

Pascal изначально имел единое пространство имен для идентификаторов. Это означает, что X как тип и X как имя переменной, поля и т. Д. Будут конфликтовать.

Чтобы исправить API-интерфейсы, которые использовали тот факт, что это работает по-другому в C (и, таким образом, не были действительно независимыми от языка), было введено соглашение для префиксных типов с T.

Afaik это уже было сделано для Turbo Vision, пакета, для которого ООП был добавлен в (Turbo) Pascal. Который, afaik, был портом из C ++.

Позже в Delphi эта схема была расширена. (используя, например, "A" для имен параметров). Но некоторые из венгерских обозначений в Delphi могли бы быть и для дизайнера графического интерфейса.

Afaik только в D4, Delphi позволял идентификаторам типов полей совпадать с именами полей.

1 голос
/ 13 ноября 2011

Просто так будет лучше соответствовать соглашению об именах Паскаля.Вы можете следовать этому, если хотите, и ваш код будет выглядеть более похожим на Pascal, но ничего плохого не произойдет, если вы этого не сделаете.

...