У ББ стандартное соглашение о вызове - виндовый stdcall. У фрипаскаля какое-то своё. Для Add параметры передаются через eax, edx, ecx. Похоже на борландский fastcall (первые три параметра, если можно, передаются через регистры).## Код:
```
P$LIBTEST_ADD$PWIDECHAR$PWIDECHAR$PWIDECHAR:
P$LIBTEST_ADD$PWIDECHAR$PWIDECHAR$PWIDECHAR:
; Temps allocated between ebp-68 and ebp-12
; [lib.pas]
; [4] begin
      push   ebp
      mov   ebp,esp
      sub   esp,68
      mov   dword ptr [ebp-68],ebx
; Var a located at ebp-4
; Var b located at ebp-8
; Var c located at ebp-12
      mov   dword ptr [ebp-4],eax
      mov   dword ptr [ebp-8],edx
      mov   dword ptr [ebp-12],ecx
...
```
Вот как с stdcall (виндовый fpc)## Код:
```
P$LIBTEST_ADD$PWIDECHAR$PWIDECHAR$PWIDECHAR:
; Temps allocated between ebp-56 and ebp+0
; [lib.pas]
; [4] begin
      push   ebp
      mov   ebp,esp
      sub   esp,56
      mov   dword ptr [ebp-56],ebx
; Var a located at ebp+8
; Var b located at ebp+12
; Var c located at ebp+16
```
РезультатВложение:
1.PNG [ 25.68 КБ | Просмотров: 5496 ]
Сорри что картинкой, но командеры в [code] не засушень, а хотелось показать ББ-е тестирование. Роман, как я увидел, использовал самый примитивный вариант с параметрами тестовой процедуры, прошитыми как константы в исходнике. В ББ есть возможность, с минимальными усилиями, эти параметры вынести ниже текста модуля. И отрабатывать без перекомпиляции/перезагрузки модуля.