Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi zugriff auf array einer function in Typelibrary (https://www.delphipraxis.net/38102-zugriff-auf-array-einer-function-typelibrary.html)

th_bone 14. Jan 2005 18:01


zugriff auf array einer function in Typelibrary
 
Hallo,

in einer Typelibrary, die ich importiert habe findet sich folgende function
kann mir jemand sagen wie ich in meinem programm das array definieren muß
um es auslesen zu können ?

function Get_adOpen(out pVal: PSafeArray): HResult; stdcall;

aber irgendwie sitze ich heute auf dem Schlauch wie definere ich den dieses Array damit es mit
der function kompatibel und von mir auslesbar ist ? die function anzusprechen ist kein problem
nur krieg ich das mit dem array nicht gebacken

Danke für eure hilfe

Ralf

omata 14. Jan 2005 19:45

Re: zugriff auf array einer function in Typelibrary
 
Moin,

habe folgendes gefunden...

Delphi-Quellcode:
  tSAFEARRAYBOUND = record
    cElements:LongInt;
    lLbound:LongInt;
  end;

  PSafeArray = ^TSafeArray;
  {$EXTERNALSYM tagSAFEARRAY}
  tagSAFEARRAY = record
    cDims: Word;
    fFeatures: Word;
    cbElements: Longint;
    cLocks: Longint;
    pvData: Pointer;
    rgsabound: array[0..0] of TSafeArrayBound;
  end;
  TSafeArray = tagSAFEARRAY;
  {$EXTERNALSYM SAFEARRAY}
  SAFEARRAY = TSafeArray;
Vielleicht hilft dir das

MfG
Thorsten

th_bone 18. Jan 2005 20:09

Re: zugriff auf array einer function in Typelibrary
 
Hallo,

zur Hilfe für andere, die dieses Problem haben hier die funktionierende Lösung die ich unter tatkräfiger mithilfe von Andreas Kosch (Autor - DCOM/Com mit Delphi) gefunden habe:

Das Hauptproblem für mich war, dass das psavearray kein array sondern nur einen Zeiger auf das eigentliche Array enthält

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
  pSA    : PSafeArray;
  i      : Integer;
  swValue : single;    
  iDim   : Integer;
  iLBound : Integer;
  iUBound : Integer;
begin
  pSA := nil;

 // Verbindung zur Typbibliothek
 iquotes:= coMLquotes.Create; // 2. coclasse definieren
 iquotes.DownloadQuotes('SUNW',20041013,20050114,d);
 // PSaveArray Zeiger holen
 iquotes.Get_adOpen(pSa);

  iDim := SafeArrayGetDim(pSA);
  if iDim = 1 then
    begin
    SafeArrayGetLBound(pSA, 1, iLBound);
    SafeArrayGetUBound(pSA, 1, iUBound);
    for i := iLBound to iUBound do
    begin
      SafeArrayGetElement(pSA, i, swValue);
      ListBox1.Items.Add(floattostrf(swValue,fffixed,4,2));
    end;
    ListBox1.Items.Add('------------');
  end;
  SafeArrayDestroy(pSA);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz