0

で作成されたCOMinを使用しており、クラスのメソッドの 1 つが型の配列を返します。ただし、Delphi がそれをインポートすると、その型の配列の代わりに.Delphi 7C#PSafeArray

その配列の項目をその基本型にキャストするにはどうすればよいですか?

使用しようとしましたSafeArrayGetElementが、アイテムを元のタイプにキャストする方法が見つかりませんでした。

4

2 に答える 2

1

SafeArrayGetElementがキャストを行うので、なぜキャストを行う必要があるのか​​わかりません。例 :

var
  Scope : ICOMScope;
  LBound, UBound, I : Integer;
begin
  SafeArrayGetLBound(fMyComObject.Scopes, 1, LBound);
  SafeArrayGetUBound(fMyComObject.Scopes, 1, HBound);
  for i := lBound to Hbound do
  begin
    SafeArrayGetElement(fMyComObject.Scopes, i, Scope);
    //do something with scope
  end;
end;
于 2011-03-25T16:34:20.763 に答える
0

Delphi が型ライブラリの解釈をどのように処理するかは正確にはわかりませんが、aSAFEARRAYには関連付けられた型があります。

C# アセンブリのタイプ ライブラリを表示できる場合は、そこから基になる型を収集できる可能性があります。

そうでない場合はSafeArrayGetVarType、配列を呼び出して、実行時に関連付けられた型を取得できSAFEARRAYます (ただし、一部の API によって作成された s ではこれに問題があったため、ガベージ バックが返される可能性があります)。

ただし、ほとんどの場合、すべてのアイテムが「動的」タイプであるSAFEARRAYofとして公開されます。VARIANT

VARIANTDelphi で s を処理できるかどうか知っていますか?

于 2010-02-08T14:02:03.980 に答える