![]() |
variantes Array aus Longs?
Hallo,
Delphi kennt den wunderschönen Datentypen varInt64. Leider bekomme ich bei
Delphi-Quellcode:
Die Meldung
var
bla: Variant; begin bla:=VarArrayCreate([0,0],varInt64); Zitat:
(ja, es müssen longs sein) genervte Grüße Thomasch |
Re: variantes Array aus Longs?
muss es denn unbedingt nen variantes array sein?
|
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. |
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 |
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 |
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 |
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. |
Re: variantes Array aus Longs?
Zitat:
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 |
Re: variantes Array aus Longs?
Zitat:
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:
Von acadapp leitet sich dann so ziemlich alles andere ab.
var
acadapp: variant; begin acadapp:=comobj.GetActiveOleObject('AutoCAD.Application.16'); [...] 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 |
Re: variantes Array aus Longs?
Zitat:
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 01:40 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 by Thomas Breitkreuz