Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Länge eines "Variant array of variant" (?) bestimmen [OLE] (https://www.delphipraxis.net/124748-laenge-eines-variant-array-variant-bestimmen-%5Bole%5D.html)

freejay 24. Nov 2008 16:09


Länge eines "Variant array of variant" (?) bestimm
 
Hallo zusammen,

ich habe das Problem, dass ich nicht die leiseste Ahnung habe, wie ich die Anzahl der von LinkSources* zurückgegebenen Einträge in der Variante vLinks ermitteln soll:

Delphi-Quellcode:
procedure TfMain.UpdateLinks(FileName: TFileName);
var
  vExcel: Variant;
  vWorkbook: Variant;
  vWorksheet: Variant;
  vLinks: Variant;
  i: Integer;
begin
  vExcel := CreateOleObject('excel.application');

  vWorkbook := vExcel.WorkBooks.Open(FileName,0);
  vLinks := vWorkbook.LinkSources(1);

  for i := 1 to High(vLinks) do
    ShowMessage(vLinks[i]);

  vWorkbook.Close(SaveChanges:=false);

  vExcel.Quit;
  vExcel := UnAssigned;
end;
In VBA macht man das mit UBound(vLinks), aber UBound gibt's ja in Delphi nicht - oder?

High(vLinks) geht definitiv nicht in Delphi,
vLinks.Count auch nicht.
ich habe auch versucht, das Ganze zu casten:

Delphi-Quellcode:
procedure TfMain.UpdateLinks(FileName: TFileName);
type
  TMyArrayOfVariant = array of variant;
var
...
  myLinks: TMyArrayOfVariant;
begin
...
 myLinks := TMyArrayOfVariant(vLinks);
...
end;
funktioniert auch nicht...

Hat irgendjemand eine Idee?

Danke schon jetzt!

Freejay

*LinkSources liefert die in einem Excel-Sheet verknüpften Dateien zurück.

nicodex 24. Nov 2008 16:19

Re: Länge eines "Variant array of variant" (?) bes
 
Da UBound eine Methode von/für SafeArrays zu sein scheint, tippe ich mal auf die VarArrayXxx-Funktionen (VarArrayHighBound - ruft intern OLEs 'SafeArrayGetUBound' auf ;)).

freejay 24. Nov 2008 16:30

Re: Länge eines "Variant array of variant" (?) bes
 
Super! Damit geht's! Da wär ich nie drauf gekommen...

Vielen Dank!

Gruß

Freejay

nicodex 24. Nov 2008 16:33

Re: Länge eines "Variant array of variant" (?) bes
 
Dafür gibt’s das Forum ;)

Viel Erfolg.

Chemiker 24. Nov 2008 19:48

Re: Länge eines "Variant array of variant" (?) bes
 
Hallo freejay,

eine Anmerkung zu der Variablen deklaration. Statt Variant, sollte man bei OLE-Automatisierung besser OLEVariant einsetzen.

Bis bald Chemiker

freejay 24. Nov 2008 20:21

Re: Länge eines "Variant array of variant" (?) bes
 
Danke für den Tipp.

Gibt's da außer der Genauigkeit der Typbezeichnung einen Unterschied zu Variant?

mkinzler 24. Nov 2008 20:24

Re: Länge eines "Variant array of variant" (?) bes
 
Variant ist variabel

Apollonius 24. Nov 2008 20:26

Re: Länge eines "Variant array of variant" (?) bes
 
Laut Hilfe kann ein OleVariant keine programmspezifischen Typen enthalten. Während beispielsweise von IDispatch abgeleitete Interfaces oder Widestrings also immer erlaubt sind, kann ein OleVariant im Gegensatz zum Variant keine Ansistrings oder andere Typen, die durch Ableitung von TCustomVariantType entstanden sind, enthalten.

sirius 24. Nov 2008 20:43

Re: Länge eines "Variant array of variant" (?) bes
 
OleVariant wird einfach ein wenig anders gespeichert. OleVariant kann von jeder anderen Prograqmmiersprache benutzt werden. Variant ist delphispezifisch. Damit ergeben sich die Sachen, die Apollonius genannt hat. Bei den meisten Sachen merkt man innerhalb Delphi keinen Unterschied.

Apollonius 24. Nov 2008 20:48

Re: Länge eines "Variant array of variant" (?) bes
 
Zitat:

Zitat von sirius
OleVariant wird einfach ein wenig anders gespeichert.

Tatsächlich? Ich dachte, dass bei OleVariant lediglich die möglichen Werte für VType eingeschränkt sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr.

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