Спасибо, Пётр, поглядел твои эксперименты. И потом еще DevDebug поизучал более настойчиво. Придумал решение:
Код:
c.pName := "";
(* получаем имя процедуры *)
Kernel.SearchProcVar(SYSTEM.VAL(INTEGER, c.p), mod, adr); (* c.p = процедурная переменная *)
IF mod # NIL THEN
IF mod.refcnt >= 0 THEN
ref := mod.refs;
REPEAT
Kernel.GetRefProc(ref, n, procName);
UNTIL (n = 0) OR (n > adr);
IF n > 0 THEN
Kernel.GetModName(mod, modName);
Strings.Utf8ToString(procName, name, res);
(* записываем полное имя процедуры для передачи другому Блэкбоксу *)
c.pName := modName + "." + name (* <===== результат *)
END
ELSE
Log.String("module unloaded"); Log.Ln
END;
END;
Файл с примером обновил тоже в хранилище.