AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein VB Array/Variant nach Delphi konvertieren
Thema durchsuchen
Ansicht
Themen-Optionen

VB Array/Variant nach Delphi konvertieren

Ein Thema von DCoderHH · begonnen am 20. Mai 2015 · letzter Beitrag vom 20. Mai 2015
Antwort Antwort
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#1

VB Array/Variant nach Delphi konvertieren

  Alt 20. Mai 2015, 09:56
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: VB Array/Variant nach Delphi konvertieren

  Alt 20. Mai 2015, 10:19
Delphi-Referenz durchsuchenVarArrayCreate oder Delphi-Referenz durchsuchenVarArrayOf
Delphi-Referenz durchsuchenVariants
$2B or not $2B
  Mit Zitat antworten Zitat
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: VB Array/Variant nach Delphi konvertieren

  Alt 20. Mai 2015, 10:28
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.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: VB Array/Variant nach Delphi konvertieren

  Alt 20. Mai 2015, 10:41
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;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: VB Array/Variant nach Delphi konvertieren

  Alt 20. Mai 2015, 10:50
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.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: VB Array/Variant nach Delphi konvertieren

  Alt 20. Mai 2015, 10:57
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..
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
DCoderHH

Registriert seit: 4. Feb 2015
Ort: Hamburg
84 Beiträge
 
Delphi 10 Seattle Professional
 
#7

AW: VB Array/Variant nach Delphi konvertieren

  Alt 20. Mai 2015, 13:50
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).
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:29 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