Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   VB Array/Variant nach Delphi konvertieren (https://www.delphipraxis.net/185168-vbulletin-array-variant-nach-delphi-konvertieren.html)

DCoderHH 20. Mai 2015 08:56

VB Array/Variant nach Delphi konvertieren
 
Hallo,

ich habe folgenden Visual Basic Code:

Code:
Dim MyOptions As Variant
Dim res As Variant
res = foo.runMacro(...)

MyOptions = Array(Array("Option One", 1234), _
     Array("Option Two", "Michigan"), _
     Array("Option Three", res))
Wie sieht das selbe in Delphi aus?

himitsu 20. Mai 2015 09:19

AW: VB Array/Variant nach Delphi konvertieren
 
Delphi-Referenz durchsuchenVarArrayCreate oder Delphi-Referenz durchsuchenVarArrayOf
Delphi-Referenz durchsuchenVariants

DCoderHH 20. Mai 2015 09:28

AW: VB Array/Variant nach Delphi konvertieren
 
Zitat:

Zitat von himitsu (Beitrag 1302248)

Danke, daran dachte ich auch erst, dann lag ich ja doch nicht so falsch. Ich habs auch mit VarArrayCreate probiert. Doch MyOptions wird am Ende an eine OLE-Funktion von einem Drithersteller übergeben. Der Aufruf schlägt dann fehl. Der Hersteller sagt, die oben von Dir genannten Funktion sind nicht richtig. Er weiß aber auch nicht wie es richtig geht. Er meint, dass MyOptions auf jeden Fall ein Variant (kein Array!) sein muss, es aber ein mehrdimensionales low level Delphi Array enthalten muss. Ähnlich wie in VB dort wird mit Array(...) auch ein LowLevelArray erzeugt und kein VariantArray oder sowas in der Art.

Neutral General 20. Mai 2015 09:41

AW: VB Array/Variant nach Delphi konvertieren
 
Wie hast dus gemacht?
Bin mir eigentlich relativ sicher dass es so aussehen müsste:

Delphi-Quellcode:
var MyOptions: Variant;
    res: Variant;
begin
  res := 'Irgendwas'; // foo.runMacro(...)

  MyOptions := VarArrayOf([VarArrayOf(['Option One', 1234]),
    VarArrayOf(['Option Two','Michigan']),
    VarArrayOf(['Option Three', res])]);
end;

DCoderHH 20. Mai 2015 09:50

AW: VB Array/Variant nach Delphi konvertieren
 
Zitat:

Zitat von Neutral General (Beitrag 1302252)
Wie hast dus gemacht?
Bin mir eigentlich relativ sicher dass es so aussehen müsste:

Delphi-Quellcode:
var MyOptions: Variant;
    res: Variant;
begin
  res := 'Irgendwas'; // foo.runMacro(...)

  MyOptions := VarArrayOf([VarArrayOf(['Option One', 1234]),
    VarArrayOf(['Option Two','Michigan']),
    VarArrayOf(['Option Three', res])]);
end;

Genau so habe ich es gemacht und damit klappt der Funktionsaufruf nicht, an den MyOptions übergeben wird. VarArrayOf ruft intern VarArrayCreate auf, was laut Hersteller ja nicht verwerwendet werden darf, da das kein LowLevel-(Delphi)-Array erzeugt.

Neutral General 20. Mai 2015 09:57

AW: VB Array/Variant nach Delphi konvertieren
 
Array() in VB erzeugt aber auch kein low level Array sondern ein Variant array. Deswegen macht es in meinen Augen keinen Sinn.

Aber gut. Wenn es "low level" Delphi Arrays sein sollen dann probiers so:

Delphi-Quellcode:
type
  TVarArray1D = Array of Variant;
  TVarArray2D = Array of TVarArray1D;

var Options: TVarArray2D;
    res: Variant;
begin
  res := 'foo.runMacro(...)';

  Options := TVarArray2D.Create(TVarArray1D.Create('Option One', 1234),
    TVarArray1D.Create('Option Two', 'Michigan'),
    TVarArray1D.Create('Option Three', res));
end;
Geht in den neueren Delphi Versionen etwas leichter, oder es geht auch anstrengender mit manuellem SetLength und danach einzelne Zuweisungen.
Aber daran glaube ich nicht. Falls du nämlich deiner Funktion ein "Variant" übergeben musst dann kannst du das da oben nicht mal übergeben..

DCoderHH 20. Mai 2015 12:50

AW: VB Array/Variant nach Delphi konvertieren
 
Zitat:

Zitat von Neutral General (Beitrag 1302258)
Geht in den neueren Delphi Versionen etwas leichter, oder es geht auch anstrengender mit manuellem SetLength und danach einzelne Zuweisungen.
Aber daran glaube ich nicht. Falls du nämlich deiner Funktion ein "Variant" übergeben musst dann kannst du das da oben nicht mal übergeben..

Jup, das stimmt. Die Funktion möchte ein OleVariant haben. Packe ich Options von Typ TVarArray2D nochmal in eine Variant-Variable compiliert es. Während der Laufzeit gibt es aber trotzdem den Fehler, den alle Versuche bisher geliefert haben (EOleException).


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 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