请教如何直接写Variant数组的数据
我要实现这样的一个函数:{
输入一个元素为Variant的一维数组 (调用者确保)
输出一个元素为Variant的一维数组,但在数组的首部插入一个字符串类型的Variant
}
function BuildResult(
aVarArray: Variant
): Variant;
var
I, L, H, ElmtCnt: Integer;
begin
L := VarArrayLowBound(aVarArray);
H := VarArrayHighBound(aVarArray);
ElmtCnt := H - L + 1; Result := VarArrayCreate([0..ElmtCnt], varVariant); Result[0] := 'MySignature';
for I := L to H do
Result[I-L+1] := aVarArray[I];
end;上面的函数中,主要是当ElmtCnt比较大的时候
A[I+1] := aVarArray[I];
这一句执行的总开销比较大,因此我想优化一下它,于是我想到VarArrayLock
我想请教一下这种情况下,我可以用VarArrayLock吗,怎么做才能利用VarArrayLock?
下面的代码应该怎样完成?
{
输入一个元素为Variant的一维数组 (调用者确保)
输出一个元素为Variant的一维数组,但在数组的首部插入一个字符串类型的Variant
}
function BuildResult2(
aVarArray: Variant
): Variant;
var
L, H, ElmtCnt: Integer;
PSource, PResult: ? //这个应该是什么结构呢?
begin
H := VarArrayHighBound(aVarArray);
L := VarArrayLowBound(aVarArray);
ElmtCnt := H - L + 1; Result := VarArrayCreate([0..ElmtCnt], varVariant); {$O-}
PResult := nil;
{$O+} Result[0] := 'MySignature';
PSource := VarArrayLock(aVarArray);
try
PResult := VarArrayLock(Result);
//???
//怎样将aResultArray的内容快速复制到Result中?
//???
finally
VarArrayUnlock(aVarArray);
if PResult <> nil then
VarArrayUnlock(Result);
end;
end;有答案了,一定加多100分,谢谢
我要实现这样的一个函数:{
输入一个元素为Variant的一维数组 (调用者确保)
输出一个元素为Variant的一维数组,但在数组的首部插入一个字符串类型的Variant
}
function BuildResult(
aVarArray: Variant
): Variant;
var
I, L, H, ElmtCnt: Integer;
begin
L := VarArrayLowBound(aVarArray);
H := VarArrayHighBound(aVarArray);
ElmtCnt := H - L + 1; Result := VarArrayCreate([0..ElmtCnt], varVariant); Result[0] := 'MySignature';
for I := L to H do
Result[I-L+1] := aVarArray[I];
end;上面的函数中,主要是当ElmtCnt比较大的时候
A[I+1] := aVarArray[I];
这一句执行的总开销比较大,因此我想优化一下它,于是我想到VarArrayLock
我想请教一下这种情况下,我可以用VarArrayLock吗,怎么做才能利用VarArrayLock?
下面的代码应该怎样完成?
{
输入一个元素为Variant的一维数组 (调用者确保)
输出一个元素为Variant的一维数组,但在数组的首部插入一个字符串类型的Variant
}
function BuildResult2(
aVarArray: Variant
): Variant;
var
L, H, ElmtCnt: Integer;
PSource, PResult: ? //这个应该是什么结构呢?
begin
H := VarArrayHighBound(aVarArray);
L := VarArrayLowBound(aVarArray);
ElmtCnt := H - L + 1; Result := VarArrayCreate([0..ElmtCnt], varVariant); {$O-}
PResult := nil;
{$O+} Result[0] := 'MySignature';
PSource := VarArrayLock(aVarArray);
try
PResult := VarArrayLock(Result);
//???
//怎样将aResultArray的内容快速复制到Result中?
//???
finally
VarArrayUnlock(aVarArray);
if PResult <> nil then
VarArrayUnlock(Result);
end;
end;有答案了,一定加多100分,谢谢
解决方案 »
- 如何在循环中给多个控件辅值
- 请问:treeview如何加背景图片?
- 急 怎么利用delphi写windows API中的socket程序?
- 请问在窗体上已有网址,单击即可连接到该网页,用什么组件?急用!
- ^_^我是一名大四学生,我想找到一份软件开发的工作,可是没有工作经验,我该怎么办呢?
- 怎么在memo或者richedit的左边显示当前行号呢?
- 关于is和as的问题
- 熟悉Tuxedo和Delphi的大虾请进!
- 我想做一个我们单位的人事管理系统,但是我没有该项目实际编程的
- 为什么我写的ActiveX被VBScript调用的时候IE认为是不安全的?
- 对于type,我不是太理解!
- 一个困惑我的小问题,关于光标定位的问题。
A: Variant;
i:integer;
begin A := VarArrayCreate([0, 4], varVariant);
A[0] := 1;
A[1] := 1234.5678;
A[2] := 'Hello world';
A[3] := True;
A[4] := VarArrayOf([1, 10, 100, 1000]);
for i:=0 to 3 do
memo1.Lines.Add(string(a[i]));
for i:=0 to 3 do
begin
memo1.Lines.Add(string(a[4][i]));
end;
end;
aVarArray: Variant
): Variant;
begin
Result := VarArrayCreate([0,1], varVariant);
Result[0] := 'MySignature';
result[1]:=aVarArray;
end;procedure TForm1.Button1Click(Sender: TObject);
var
A,B: Variant;
i,j,iH,iL,jH,jL:integer;
begin
A := VarArrayCreate([0, 3], varVariant);
A[0] := 1;
A[1] := 1234.5678;
A[2] := 'Hello world';
A[3] := True;
B:=BuildResult2(A);
Memo1.Lines.Clear;
iL:=VarArrayLowBound(B,1);
iH:=VarArrayHighBound(B,1);
for i:=iL to iH do
begin
Memo1.Lines.Add(inttostr(i));
if varisArray(B[i]) then
begin
for j:=0 to 3 do
begin
Memo1.Lines.Add(string(B[i][j]));
end; end
else
Memo1.Lines.Add(string(B[i]));
end;end;
我的结果反回来了
aVarArray: Variant
): Variant;
的返回值必须是一个一维的Variant的数组,
并且每一个数组元素都不能又是一个数组比如,输入aVarArray为
[1.5, 'ABc', 'def']
那么结果应该为
['MySignature', 1.5, 'ABc', 'def']