delphi中SafeArray的读写有关问题中的高手

delphi中SafeArray的读写问题请教高手中的高手!
delphi中操作SafeArray的两个关键函数SafeArrayPutElement()和SafeArrayGetElement()怎么用,有没有实际用过的高手给解释一下各参数的含义啊,谢谢了。

------解决方案--------------------
先声明一下
下面这段代码不是我写的,网上说是hubdog写的,如果对楼主有帮助,一起向作者致敬吧

Delphi(Pascal) code

SafeArray的使用非常麻烦,下面是写过的一段为ScriptControl添加自定义函数并调用的代码
,就用到了SafeArray
    procedure TForm1.Button1Click(Sender: TObject);
    var
      n:Integer;
      Parameters:PSafeArray;
      bound:TSAFEARRAYBOUND;
      Index:integer;
      v:Variant;
    begin
      //
      try
        n:=StrToInt(inputbox('demo','请输入要计算阶乘的数',''));
      except
        ShowMessage('输入有误,必须输入数字,请重新运行');
        Exit;
      end;
      ScriptControl1.Reset;  
      ScriptControl1.Language:='JScript';
      //添加阶乘函数
      scriptcontrol1.addCode('function factorial(num){'+
                     'result=1;for(ix=1;ix<=num;ix++){'+
                     'result = result*ix;};return result;};'); 
    //参数为一维有一个元素的SafeArray
      bound.lLbound:=0;
      bound.cElements:=1;
      try
        Parameters := SafeArrayCreate(VT_VARIANT, 1, bound);
      except
        ShowMessage('分配内存错误');
        Exit;
      end;
      //因为SafeArrayPutElement的第二个参数定义为const类型,
      //所以index必须定义为变量并赋值才能被调用
      V:=n;
      Index:=0;
      SafeArrayPutElement(Parameters,Index,V);
      try
        ShowMessage(ScriptControl1.Run('factorial',Parameters));
      finally
        SafeArrayDestroy(Parameters);
      end;
    end;