The vbAccelerator-stuff is "overly expressive" in the way it is written,
but not giving any different results from the short(er) IsDimmed-Routine I've posted further above.

Both routines route VB-ArrayParams through a (VT_)ByRef-Variant-Hull -
and that works for most of VBs ArrayTypes - but leaving out Arrays of UDTs,
as long as those UDTs were not defined in a TypeLib or a Public Class of an
ActiveX-Dll (IRecordInfo is needed).

wqweto gave an interesting solution in his post #10, with his Variations around
leaving out the first param of RtlMoveMemory in the Declaration, in conjunction
with defining a (larger than 8 Bytes) returnvalue for this (normally defined "void") routine.

This way he achieved a kind of "DeReference-Function with arbitrary length" - and as
long as MS is not breaking their stdcall ABI on x86-CPUs, this should work nicely -
for all of VBs ArrayTypes, even those based on normally defined UDTs.

Olaf