Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi variantes Array aus Longs? (https://www.delphipraxis.net/48714-variantes-array-aus-longs.html)

thomasch 29. Jun 2005 15:07


variantes Array aus Longs?
 
Hallo,
Delphi kennt den wunderschönen Datentypen varInt64. Leider bekomme ich bei
Delphi-Quellcode:
var
bla: Variant;
begin

bla:=VarArrayCreate([0,0],varInt64);
Die Meldung
Zitat:

Im Projekt Project1.exe ist eine Exception der Klasse EVariantArrayCreateError aufgetreten. Meldung: 'Fehler beim Erzeugen von Variante oder sicherem Array'.
Wie komme ich denn nun zu meinem Array aus longs?
(ja, es müssen longs sein)

genervte Grüße


Thomasch

barf00s 29. Jun 2005 16:39

Re: variantes Array aus Longs?
 
muss es denn unbedingt nen variantes array sein?

scp 29. Jun 2005 17:12

Re: variantes Array aus Longs?
 
Wo ist das Problem?
long = DWORD = Cardinal = 32 bit, warum dann Int64?

Ansonsten probiers mal mit varDouble, das hat auch 8 Byte = 64 bit.

marabu 29. Jun 2005 17:45

Re: variantes Array aus Longs?
 
Ich habe mir den Quelltext der Funktion VarArrayCreate() angesehen und komme zu dem Schluss, dass da ein Bug vorliegt. Und zwar scheitert die Prüfung VarTypeIsValidArrayType(varInt64) wegen VarTypeToElementInfo.ValidBase = false. Laut MS PSDK müsste das eigentlich true sein. Vielleicht kann das ja jemand verifizieren?

marabu

thomasch 29. Jun 2005 23:02

Re: variantes Array aus Longs?
 
N bissl Hintergrund:
Ich rufe eine Funkion von AutoCAD auf, die als einen Paramter ein Vararray "long" braucht.
VarArrayCreate([x,y],VarInteger) gibt ne Fehlermeldung aus - es _müssen_ longs sein.

Wenn das wirklich n Bug sein sollte - is der nur in D7 oder auch in 2000?

Besorgte Grüße

Thomasch

dizzy 29. Jun 2005 23:18

Re: variantes Array aus Longs?
 
Bist du dir sicher, dass es nicht in dieser Form sein soll:
Delphi-Quellcode:
// Die Funktion die du aufrufst
procedure Funktion(var array of Cardinal);
.
.

// Dein Aufruf
var
  ar: array of Cardinal; // Unter Umständen feste Länge
begin
  Funktion(ar); // Gibt die Funktion die resultierende Länge zurück? Dann brauchst du vermutlich 2 Aufrufe:
                // einen um die Länge zu ermitteln, dann Arraylänge setzen, und dann der eigentliche Aufruf
.
.
:?:

Weil auch DAS könnte man als var-Array interpretieren. Der Variant-Typ ist im Übrigen ein Delphi interner Typ, der AutoCAD (welches ja sicherlich in C geschrieben ist) nicht bekannt sein dürfte. (Ich weiss allerdings nicht, ob es etwas dieser Art als OLEVariant-Möglichkeit gäbe - das wäre u.U. was.)
Rufst du eine Funktion einer Wrapper-Unit (also Pascal-Quellcode), oder direkt in einer DLL auf? Bei letzterer Variante wäre ich nicht sicher, ob ein VarArray basierend auf Variant das richtige ist.

Alles in allem haben wir ein bischen zu wenige Infos um gezielter raten zu können ;).

Gruss,
Fabian

scp 29. Jun 2005 23:31

Re: variantes Array aus Longs?
 
Dann ist mit long auf jeden Fall ein unsigned 32 bit-Wert, also Cardinal gemeint.
Auf der C-Schiene dürfte ein Array, wie dizzy schon sagt, anders aufgebaut sein.
Kannst du uns mal die genaue Deklaration der Funktion geben? Also in C und in Delphi. Das wäre sehr hilfreich.

marabu 29. Jun 2005 23:42

Re: variantes Array aus Longs?
 
Zitat:

Zitat von thomasch
Wenn das wirklich n Bug sein sollte - is der nur in D7 oder auch in 2000?

2000?

In D7 ist es aus meiner Sicht ein bug. Du kannst ihn aber leicht umgehen, indem du die Prüfung ausschaltest. Ich habe dazu einfach die benötigten Funktionen aus VarUtils in mein Testprogramm kopiert und die Änderung dort gemacht. Danach hatte ich ein einwandfreies varArray of varInt64.

marabu

thomasch 30. Jun 2005 00:01

Re: variantes Array aus Longs?
 
Zitat:

Zitat von dizzy
Bist du dir sicher, dass es nicht in dieser Form sein soll:

Alles in allem haben wir ein bischen zu wenige Infos um gezielter raten zu können ;).

Gruss,
Fabian

Puuuh - ehrlich gesagt bin ich mehr der AutoCAD als Delphi Freak.

Auf AutoCAD greife ich, da es sonst ziemlich nervig werden kann mit später Bindung zu.

In etwa sieh das dann so aus:
Delphi-Quellcode:
var
acadapp: variant;

begin
acadapp:=comobj.GetActiveOleObject('AutoCAD.Application.16');
[...]
Von acadapp leitet sich dann so ziemlich alles andere ab.

Nun gibt es dort eine Funktion namnens GetLink(), die unter anderem mit dem Parameter "ObjectIDs" aufgeufen werden kann, der laut AutotCAD OH so aus sieht:

Variant (array of Longs); input-only; optional

Das der opitional is tut nix zu sache, da ich ebend diese option nutzen muss...

THomasch

thomasch 30. Jun 2005 00:13

Re: variantes Array aus Longs?
 
Zitat:

Zitat von marabu
Zitat:

Zitat von thomasch
Wenn das wirklich n Bug sein sollte - is der nur in D7 oder auch in 2000?

2000?

In D7 ist es aus meiner Sicht ein bug. Du kannst ihn aber leicht umgehen, indem du die Prüfung ausschaltest. Ich habe dazu einfach die benötigten Funktionen aus VarUtils in mein Testprogramm kopiert und die Änderung dort gemacht. Danach hatte ich ein einwandfreies varArray of varInt64.

marabu

Sorry - meinte natürlich 2005 :wall:
Ansonsten - kann man irgendwo nachlesen, wo und was man da machen kann/muss?

Zu meiner Verteidigung kann ich nur sagen, dass ich bis April nich wusste was Delphi ist :spin2:

Viele Grüße

Thomasch


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Seite 1 von 2  1 2   

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