Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#14

Re: variantes Array aus Longs?

  Alt 1. Jul 2005, 08:52
Hallo thomasch,

ich habe den bug in deinem thread gepostet, weil ich dachte, dass es dich betrifft. Wenn du die Prüfung rausgenommen hast, dann wird das gewünschte array mit dem Basistyp varInt64 auch erzeugt. Ich musste allerdings mehrere functions extrahieren, da sie zum Teil nicht im interface deklariert sind. Damit nicht jede Sicherheit flöten geht habe ich nur die Prüfung auf ValidBase abgewandelt:

Delphi-Quellcode:
function VarTypeIsValidArrayType(const AVarType: TVarType): Boolean;
begin
  Result := (AVarType in [CMinArrayVarType..CMaxArrayVarType]) and
            (CVarTypeToElementInfo[AVarType].ValidBase or (AVarType = varInt64));
end;
Den Erfolg kannst du sehr leicht prüfen:

Delphi-Quellcode:
uses
  MyVariants;
var
  va: Variant;
  i64: Int64;
begin
  va := VarArrayCreate([0, 0], varInt64);
  va[0] := 1234567890123456789;
  i64 := va[0];
  WriteLn(i64);
end;
Ob das alles aber wirklich dein Problem ist? Nirgendwo in deinem thread kann ich einen direkten Nachweis lesen, dass ACAD diesen Basistyp unter Long versteht.

marabu

PS: Deine Referenzen auf das Handbuch riechen stark nach VB. Dazu ein bischen was aus der VB.Net Doku:

Zitat:
Caution If you are interfacing with components written in Visual Basic version 6.0, for example Automation or COM objects, keep in mind that Long has a different data width (32 bits) in Visual Basic 6.0. If you are passing a 32-bit argument to such a component, declare it as Integer instead of Long in Visual Basic .NET.

Furthermore, Automation does not support 64-bit integers on certain platforms, including Windows 2000 and Windows 98. You cannot pass a Visual Basic .NET Long argument to an Automation component on such platforms.
  Mit Zitat antworten Zitat