で作成されたCOM
inを使用しており、クラスのメソッドの 1 つが型の配列を返します。ただし、Delphi がそれをインポートすると、その型の配列の代わりに.Delphi 7
C#
PSafeArray
その配列の項目をその基本型にキャストするにはどうすればよいですか?
使用しようとしましたSafeArrayGetElement
が、アイテムを元のタイプにキャストする方法が見つかりませんでした。
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;
Delphi が型ライブラリの解釈をどのように処理するかは正確にはわかりませんが、aSAFEARRAY
には関連付けられた型があります。
C# アセンブリのタイプ ライブラリを表示できる場合は、そこから基になる型を収集できる可能性があります。
そうでない場合はSafeArrayGetVarType
、配列を呼び出して、実行時に関連付けられた型を取得できSAFEARRAY
ます (ただし、一部の API によって作成された s ではこれに問題があったため、ガベージ バックが返される可能性があります)。
ただし、ほとんどの場合、すべてのアイテムが「動的」タイプであるSAFEARRAY
ofとして公開されます。VARIANT
VARIANT
Delphi で s を処理できるかどうか知っていますか?