2 Stimmen

Wie kann man Daten aus einem mehrdimensionalen PSafeArray erhalten?

Ich muss Daten aus einem PSafeArray in Delphi lesen.
Dieses PSafeArray wird von einer Methode zurückgegeben, die in einer DLL entwickelt wurde in C#. Diese Methode gibt ein zweidimensionales String-Array string[,] zurück. Wie liest man ein solches PSafeArray Ergebnis in Delphi?

6voto

RRUZ Punkte 132753

Sie müssen die Funktionen SafeArrayGetLBound, SafeArrayGetUBound, SafeArrayGetElement verwenden.

Versuchen Sie dieses Beispiel

var
  LSafeArray: PSafeArray;
  LBound, UBound, I: LongInt;
  LYBound, UYBound, J: LongInt;
  Index: array [0..1] of Integer;
  LData: OleVariant;
begin
  //holen Sie das PSafeArray
  LSafeArray := GetArray;// GetArray ist Ihre eigene Funktion
  //holen Sie die Grenzen der ersten Dimension
  SafeArrayGetLBound(LSafeArray, 1, LBound);
  SafeArrayGetUBound(LSafeArray, 1, UBound);
  //holen Sie die Grenzen der zweiten Dimension
  SafeArrayGetLBound(LSafeArray, 2, LYBound);
  SafeArrayGetUBound(LSafeArray, 2, UYBound);

  //über das Array iterieren  
  for I := LBound to UBound do
   for J := LYBound to UYBound do
    begin
      //setzen Sie den Index des zu holenden Elements
      Index[0]:=I; 
      Index[1]:=J;
      SafeArrayGetElement(LSafeArray, Index, LData);

      //etwas mit den Daten machen  
      Memo1.Lines.Add(LData);
    end;
  SafeArrayDestroy(LSafeArray);
end;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X