相关疑难解决方法(0)

在Delphi 2009中,我是否需要释放变体数组?

如果我有一个只包含简单类型的变量数组,以及可能的其他简单类型的变体数组,我是否需要做任何明确的事情来释放内存,或者它是否都由我来处理.我一直认为没什么可做的,但我只是有点怀疑!

delphi memory-management

5
推荐指数
1
解决办法
1893
查看次数

如何解释从 VBscript 传递到 Delphi COM 服务器应用程序的数组

我试图将字节数组从 VBscript 传递到我的 Windows Delphi 应用程序,但似乎找不到正确的语法来解释传递的数据。

要求相当简单,如下面的 VBscript 片段所示

Dim inst,arr(5)

Sub Main
  set inst=instruments.Find("EP1")
  arr(0) = 0
  arr(1) = 1
  arr(2) = 2
  arr(3) = 3
  arr(4) = 4
  inst.writebytes arr,5
end Sub
Run Code Online (Sandbox Code Playgroud)

我可以让服务器接受脚本传递的 olevariant 但数据似乎是乱码,我的示例服务器代码如下所示,并且基于此处的 Stackoverflow 问题如何在 Delphi 中使用变体数组

procedure TInstrument.WriteBytes(Data: OleVariant; Length: Integer);
var i,n:integer; Pdat:Pbyte; Adata:PvarArray;
begin
  if VarIsArray(data) then
  begin
    n:=TVarData(Data).VArray^.Bounds[0].ElementCount;
    Adata:= VarArrayLock(Data);
    Getmem(Pdat,length);
    try
      for i:=0 to length-1 do
        Pdat[i]:=integerArray(Adata.data^)[i];
      Finstrument.WriteBytes(Pdat,Length);
    finally
      freemem(Pdat)
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

所以这个想法是接受脚本传递的整数,将其转换为本地数据表示(字节数组),然后将其传递给我的函数以使用数据。

我尝试了几种不同的数据类型和方法,试图从变体中获取一些无乱码的数据,但都无济于事。

从传递的变体中提取数组数据的正确方法是什么?

另外, TVarData(Data).VArray^.Bounds[0].ElementCount 的值为零,为什么会这样?

delphi com vbscript

3
推荐指数
1
解决办法
168
查看次数

Variant数组和动态数组之间有哪些区别?

这是使用一个变体阵列(像示出之间的差异在这里),而不是一个通用动态数组?

arrays delphi variant

2
推荐指数
1
解决办法
592
查看次数

标签 统计

delphi ×3

arrays ×1

com ×1

memory-management ×1

variant ×1

vbscript ×1