Когда начал упрощать, то нашел причину. В примере закомментировал неправильное указание типа для lpModuleName
Код:
MODULE Test;
IMPORT SYSTEM, WinApi;
VAR
(* d-: PROCEDURE (lpModuleName: ARRAY [untagged] OF CHAR): INTEGER; *)
a-: PROCEDURE (hModule: LONGINT; lpProcName: ARRAY OF CHAR): INTEGER;
WriteFile-: PROCEDURE (hFile: WinApi.HANDLE; lpBuffer: WinApi.PtrVoid; nNumberOfBytesToWrite: INTEGER; VAR [nil] lpNumberOfBytesWritten: INTEGER; VAR [nil] lpOverlapped: WinApi.OVERLAPPED): INTEGER;
b: LONGINT;
PROCEDURE GetProcAddress*(hModule: INTEGER; procName: ARRAY OF CHAR; VAR c: LONGINT);
BEGIN
c := a(hModule, procName)
END GetProcAddress;
BEGIN
IF b = 0 THEN
INC(b);
END;
END Test.
Еще не могу найти в документации эквивалент обероновского флага UNTRACED для ВВ.