动态字节数组作为引用方式传递,但是在函数内部使用时出错解决思路

动态字节数组作为引用方式传递,但是在函数内部使用时出错
各位大侠,我有如下例程:
procedure test(var arrFrameBuf : array of Byte;var udwFrameLen);
begin
  SetLength(arrFrameBuf,10);
  udwFrameLen := 10;
end

但是编译时提示SetLength()那一行参数类型不兼容:E2008 Incompatible types.
各位大侠,是不是arrFrameBuf有了var修饰后,不能在test例程内部直接调用SetLength()了?
但是我的确需要这样使用arrFrameBuf啊,因为传入test例程时,arrFrameBuf的长度是未知的。只有函数内部经过一些运算后,才知道arrFrameBuf具体应该多长。哪位大侠能帮我解释一下为什么会这样?我又该怎么实现我的需求?多谢。

------解决方案--------------------
type
TarrFrameBuf = array of Byte;

procedure test(var arrFrameBuf : TarrFrameBuf;var udwFrameLen);
begin
SetLength(arrFrameBuf,10);
udwFrameLen := 10;
end

另外udwFrameLen这个变量类型呢?