AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

variantes Array aus Longs?

Offene Frage von "thomasch"
Ein Thema von thomasch · begonnen am 29. Jun 2005 · letzter Beitrag vom 1. Jul 2005
Antwort Antwort
Seite 2 von 2     12   
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#11

Re: variantes Array aus Longs?

  Alt 30. Jun 2005, 00:25
Interessanter wäre der gesamte Abschnitt von GetLink() mit allen Parametern. Es geht nämlich z.B. darum, ob auch ein Paramter NumLinks oder so vorhanden ist, der die Anzahl der Longs enthält.

Desweiteren stellt sich die Frage: Sollen die Daten von AutoCAD kommen oder musst du sie an AutoCAD übergeben (ich vermute ersteres)?
  Mit Zitat antworten Zitat
thomasch

Registriert seit: 7. Apr 2005
57 Beiträge
 
Delphi 2007 Architect
 
#12

Re: variantes Array aus Longs?

  Alt 30. Jun 2005, 00:59
Zitat von scp:
Interessanter wäre der gesamte Abschnitt von GetLink() mit allen Parametern. Es geht nämlich z.B. darum, ob auch ein Paramter NumLinks oder so vorhanden ist, der die Anzahl der Longs enthält.
Aus der OH:

RetVal = object.GetLinks([LinkTemplate] [, ObjectIDs] [, LinkTypes] [, Document])

Object stellt die allgemeine Verbindung zur DB dar

LinkTemplate
LinkTemplate object, or a string identifying a link template; input-only; optional
If specified, indicates the link template whose links are returned.

ObjectIDs
Variant (array of Longs); input-only; optional
If specified, each long is the object ID of an AutoCAD entity whose links are to be returned.

LinkTypes
Variant; input-only; optional
Specifies the type of links to return.
(letztendlich ein Integer - hat mit den ObjektIDs auch nix zu tun)

Document
Document object; input-only; optional
(Das aktuelle AutoCAD Dokument)

RetVal:
Links collection; The Links collection for the specified link template.

Zitat:
Desweiteren stellt sich die Frage: Sollen die Daten von AutoCAD kommen oder musst du sie an AutoCAD übergeben (ich vermute ersteres)?
Ich übergebe die ObjektIDs ind dieser Funktion an AutoCAD und erhalte ein Auflistung der zu den Objekten gehörenden Links.

Viele Grüße

Thomasch
  Mit Zitat antworten Zitat
thomasch

Registriert seit: 7. Apr 2005
57 Beiträge
 
Delphi 2007 Architect
 
#13

Re: variantes Array aus Longs?

  Alt 1. Jul 2005, 09:21
Hallo,
Zitat von marabu:
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
Ich habe jetzt mal fogendes Versucht:
- die VarArrayCreate aus der unit Variants kopiert und als myVarArrayCreate in eine neue Unit gepackt.

Dort dann aber die Prüfung rausgenommen.

Wie kann ich testen, ob da auch ein "richtiges" Array raus kommt?

Es scheint zwar zunächst durchzulaufen, jedoch meldet mit die Funktion, der ich das Array dann übergebe mal wieder "Falscher parameter".

Thomasch
  Mit Zitat antworten Zitat
marabu

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

Re: variantes Array aus Longs?

  Alt 1. Jul 2005, 09: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
thomasch

Registriert seit: 7. Apr 2005
57 Beiträge
 
Delphi 2007 Architect
 
#15

Re: variantes Array aus Longs?

  Alt 1. Jul 2005, 10:08
Hallo,
danke erstmal für Deine Hife
Zitat von marabu:
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
Daran zweifle ich langsam auch

Ich habe momentan eigentlich nur die OnlineHife, ein VB Beispiel und die Deklaration in der TLB. Alles ziemlich wage...

Das VB Beispiel:
Code:
  Dim objIds() As Long
  ReDim objIds(0 To entitySet.Count - 1) As Long
  Dim index As Long
  For index = 0 To entitySet.Count - 1
      objIds(index) = entitySet.Item(index).objectId
  Next index
  Set linkSel = dbConnect.GetLinks(objLinkTemplate, objIds, linkTypes)
Die Deklaration in der, aus guten Gründen nicht genutzten, cao_tlb.pas:

Delphi-Quellcode:
    function GetLinks(LinkTemplate: OleVariant; ObjectIDs: OleVariant; LinkTypes: SYSINT;
                      Document: OleVariant): ILinks; safecall;
Der Auszug aus der Onlienhilfe steht oben.

Mittlerweile fehlen mir langsam die Ideen, wo ich noch nach dem Fehler suchen könnte - die ID Selber ist da, und wenn der link nich da sein sollte, erwarte ich eigentlich eine andere Fehlermeldung.

Viele Grüße


Thomasch
  Mit Zitat antworten Zitat
marabu

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

Re: variantes Array aus Longs?

  Alt 1. Jul 2005, 10:13
Vielleicht habe ich es übersehen, aber ist es so wie ich vermute - dass ACAD eine VBA Engine einsetzt? Wenn ja, welche Version?

marabu
  Mit Zitat antworten Zitat
thomasch

Registriert seit: 7. Apr 2005
57 Beiträge
 
Delphi 2007 Architect
 
#17

Re: variantes Array aus Longs?

  Alt 1. Jul 2005, 10:15
OOOPs
Soory, ich hab das letzte zunächst überlesen wenn long in VB doch ein 32Bit integer ist, sollte
   VarArrayCreate([0,0],varinteger); eigentlich tun.

Irgendwie hab ich jetzt keinerlei Ahnug mehr warum das nich funzt.

Zitat:
Vielleicht habe ich es übersehen, aber ist es so wie ich vermute - dass ACAD eine VBA Engine einsetzt? Wenn ja, welche Version?
Ich vermute mal 6.0, sehe da aber noch genauer nach.


Thomasch
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#18

Re: variantes Array aus Longs?

  Alt 1. Jul 2005, 10:19
Nochmal: Es handelt sich bei Longs nicht um Int64, diese werden sowohl in C als auch in VB(A) als 32bit Wert definiert.

Wenn du die Longs übergeben sollst, dann dürfte es relativ einfach funktionieren:
Delphi-Quellcode:
var
  LongArray: packed array[0..5] Of DWORD;
begin
  LongArray[0] := 1234567889;
  LongArray[1] := 563565;
  // usw.
  acadapp.GetLinks('wasweisich', LongArray);
end;

Andere Möglichkeit: Warum importierst du nicht einfach die DLL in der "AutoCAD.Application.16" definiert ist in Delphi, über Projekt->Typbibliothek importieren...? dann bekommst du doch die passenden Parameterdeklarationen serviert.

EDIT: Es müssten folgende DLLs sein:
acdbmgd.dll
acmgd.dll
bzw. in der Liste müssten sie in etwa so auftauchen:
Autocad 2005 type library
Autocad/ObjectDBX Common 16.0 type library
  Mit Zitat antworten Zitat
thomasch

Registriert seit: 7. Apr 2005
57 Beiträge
 
Delphi 2007 Architect
 
#19

Re: variantes Array aus Longs?

  Alt 1. Jul 2005, 10:56
Zitat von scp:
Nochmal: Es handelt sich bei Longs nicht um Int64, diese werden sowohl in C als auch in VB(A) als 32bit Wert definiert.
Danke - das hab ich jetzt begriffen. Ich kam auf den Trichter, da es mit varint nicht funktionierte.

Delphi-Quellcode:
var
  LongArray: packed array[0..5] Of DWORD;
begin
  LongArray[0] := 1234567889;
  LongArray[1] := 563565;
  // usw.
  acadapp.GetLinks('wasweisich', LongArray);
end;
Tut nicht, da dann kommt "[Fehler] main.pas(139): Typ ist im Aufruf von Variant Dispatch nicht zulässig"

Zitat:
Andere Möglichkeit: Warum importierst du nicht einfach die DLL in der "AutoCAD.Application.16" definiert ist in Delphi, über Projekt->Typbibliothek importieren...? dann bekommst du doch die passenden Parameterdeklarationen serviert.

EDIT: Es müssten folgende DLLs sein:
acdbmgd.dll
acmgd.dll
bzw. in der Liste müssten sie in etwa so auftauchen:
Autocad 2005 type library
Autocad/ObjectDBX Common 16.0 type library
Werd mal tun - momentan is delphi dabei grad abgestürzt.

Viele Grüße

Thomasch
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#20

Re: variantes Array aus Longs?

  Alt 1. Jul 2005, 15:22
Zitat von thomasch:
Werd mal tun - momentan is delphi dabei grad abgestürzt.
Ist mir bei der eBay SDK auch schon vorgekommen, bzw. hat er ziemlich lang gerechnet (ca. 10 min.), ist also nichts ungewöhnliches.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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:08 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