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;