Как ни странно, но тип BOOL в WinAPI определен как знаковое целое (int)

. Поэтому не совсем корректно приравнивать его к Boolean (этот тип вообще предпочитаю не использовать). Некоторые АПИшные функции могут возвращать true как отрицательное число...
LONG_PTR для win32 определен как long, а для win64 как __int64, что соответствует типам LongInt и Int64, соответственно.
Методом научного тыка разобрался с вопросом.
Покажу на примере второй функции.
1. Определяем тип-функцию.
Код:
type
B_ENUMPROC= function (lpArg: PChar): BOOL; stdcall;
2. Описываем импортируемую функцию.
Код:
EnumFuncB(lpEnumProc: B_ENUMPROC; dwFlags: Dword): BOOL; stdcall; external 'Oops.dll' name 'EnumFuncB';
Компилим, проверяем.
3. Определяем прототип callback-функции в строгом соответствии с п.1.
Код:
function EnumProcCallback(Arg: PChar): BOOL; stdcall;
4. определяем реализацию функции:
Код:
begin
if Arg<>nil then
begin
; // что-то делаем с полученным аргументом
end
Result:=1; // True, если хотим продолжения перечисления, False (Result:=0), если не желаем продолжения
end;
5. Вызов функции перечисления.
Код:
EnumFuncB(@EnumProcCallback, (Flag1 or Flag2 or Flag3)); // пример комбинации из трех флагов, определенных в секции const.