SYNOPSIS
        int call_direct_resolved(mixed result, object ob, string func, ...)
        int* call_direct_resolved(mixed* result, object* ob, string func, ...)

DESCRIPTION
        Similar to call_direct(). If ob->func() is defined and publicly
        accessible, any of the optional extra arguments are passed to
        ob->func(...). The result of that function call is stored in
        result, which must be passed by reference.

        This efun is a twin to call_resolved(), with the difference
        being that call_direct_resolved() never calls a default method.

        The efun returns 1 if the function could be called.
        If ob::fun does not define a publicly accessible function, the
        efun will return 0.

        ob can also be an object_name. If a string is passed for ob, and
        no object with that name does exist, an error occurs.

        Additionally the efun accepts an array of objects as <ob>: the
        function is called with the same arguments in all the given objects.
        The single results are collected in two arrays, one for the result
        of the function calls that will be stored in the result parameter,
        and one for the efun result codes that will finally be returned from
        the efun. Array elements can be objects or the names of existing
        objects; destructed objects and 0s will yield a '0' as result in
        both arrays, but don't cause an error.

HISTORY
        Introduced in LDMud 3.3.113 with the H_DEFAULT_METHOD hook.
        LDMud 3.6.2 added array calls.

SEE ALSO
        call_other(E), call_strict(E), call_resolved(E), call_direct(E),
        call_direct_strict(E), create(A), pragma(LPC), extern_call(E),
        function_exists(E), functions(LPC), map_objects(E)
