AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit Variant

Ein Thema von ede57 · begonnen am 4. Nov 2008 · letzter Beitrag vom 12. Nov 2008
Antwort Antwort
Seite 1 von 2  1 2      
ede57

Registriert seit: 5. Apr 2008
Ort: Hamburg
46 Beiträge
 
Delphi XE Professional
 
#1

Problem mit Variant

  Alt 4. Nov 2008, 10:44
habe folgendes problem

Delphi-Quellcode:
// Bohrungs Shape
// Setze Shape
procedure THoleShape.Set_BodyShape(Value:Variant);

Var
  FPosArray : OleVariant;
  FPosValues : Array[0..2] of Double;
  i : Integer;
  tta : tVarType;
  S : string;

begin
   FBodyShape := Value;
// Art der Bohrung
   BohrungsType := FBodyShape.Type;
// Setze Durchmesser
   Diameter := FBodyShape.Diameter.Value;
//Variantes Array erzeugen
   FPosArray := VarArrayOf([FPosValues[ 0],FPosValues[ 1],FPosValues[ 2]]);
   TTA := vartype(FPosArray[0]); // zeigt 5 an als Double alles OK
   TTA := vartype(FPosArray[1]);
   TTA := vartype(FPosArray[2]);
// Abfrage
   FBodyShape.GetOrigin(FPosArray);
//
   TTA := vartype(FPosArray[0]); // zeigt 5 an als Double alles OK
   TTA := vartype(FPosArray[1]);
   TTA := vartype(FPosArray[2]);
//
   S := varTypeAsString(FPosArray[0]); // zeigt $00Af an = 175

// Positionen
// sollte 175 - 275 - 0 rauskommen
   FXpos := FPosArray[0]; // keine Werte
   FYpos := FPosArray[1];
   FZpos := 0;
end;
die Funktion in der TLB ist folgend
Delphi-Quellcode:
  
  HoleDisp = dispinterface
   ...
   ....
  procedure GetOrigin(ioOrigin: {??PSafeArray}OleVariant); dispid 1611071508;
   ...
   ....
ioOrigion ist als SafeArrayVariant als Double definiert

Es werden nur unsinnige werte oder nur 0 werte zurückgegeben
Vielleicht hat ja jemand eine lösung
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#2

Re: Problem mit Variant

  Alt 4. Nov 2008, 16:19
Sorry, aber ich fuerchte Du musst die Frage noch einmal stellen. Und zwar ausfuehrlicher, denn aus Deinem code geht nicht hervor was er machen soll und somit auch nicht, was schief laeuft. Ich gehe trotzdem mal darauf ein:




Delphi-Quellcode:
// Bohrungs Shape
// Setze Shape
procedure THoleShape.Set_BodyShape(Value:Variant);

Var
  FPosArray : OleVariant;
  FPosValues : Array[0..2] of Double;
  i : Integer;
  tta : tVarType;
  S : string;

begin
   FBodyShape := Value; // nicht deklariert. Was ist das?
// Art der Bohrung
   BohrungsType := FBodyShape.Type; // Auch nicht deklariert... und dann eine property namens 'type' Aua!
// Setze Durchmesser
   Diameter := FBodyShape.Diameter.Value; // -"-

//Variantes Array erzeugen
   FPosArray := VarArrayOf([FPosValues[ 0],FPosValues[ 1],FPosValues[ 2]]); //Da steht jetzt erst mal Muell drin oder?
   TTA := vartype(FPosArray[0]); // zeigt 5 an als Double alles OK //warum sollte es 5 anzeigen?
   TTA := vartype(FPosArray[1]); //Dann war die erste Zuweisung auf TTA umsonst, wenn Du das hier wieder ueberschreibst
   TTA := vartype(FPosArray[2]); //-"-
// Abfrage
   FBodyShape.GetOrigin(FPosArray); //Was macht die Anweisung?
//
   TTA := vartype(FPosArray[0]); // zeigt 5 an als Double alles OK //s.o.
   TTA := vartype(FPosArray[1]);
   TTA := vartype(FPosArray[2]);
//
   S := varTypeAsString(FPosArray[0]); // zeigt $00Af an = 175 //hab ich was nicht mitbekommen? wi sollen die 175 herkommen

// Positionen
// sollte 175 - 275 - 0 rauskommen
   FXpos := FPosArray[0]; // keine Werte
   FYpos := FPosArray[1];
   FZpos := 0;
end;
die Funktion in der TLB ist folgend
Delphi-Quellcode:
  
  HoleDisp = dispinterface
   ...
   ....
  procedure GetOrigin(ioOrigin: {??PSafeArray}OleVariant); dispid 1611071508;
   ...
   ....
ioOrigion ist als SafeArrayVariant als Double definiert

Es werden nur unsinnige werte oder nur 0 werte zurückgegeben
Vielleicht hat ja jemand eine lösung[/quote]
Frage: wo werden denn die Deiner Meinung nach unsinnigen Werte zurueckgegeben?
Oder anders herum wo macht welche Funktion etwas, das sinnvolle WErte zurueckgeben koennte?

Ich kapiers einfach nicht.
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
ede57

Registriert seit: 5. Apr 2008
Ort: Hamburg
46 Beiträge
 
Delphi XE Professional
 
#3

Re: Problem mit Variant

  Alt 4. Nov 2008, 19:10
Also ncoh mal die Frage Stellung

Probleme mit Korrekten Rückgabe werten eines Varianten Arrays
Delphi-Quellcode:
// Bohrungs Shape
// Setze Shape
procedure THoleShape.Set_BodyShape(Value:Variant);

Var
  FPosArray : OleVariant;
  FPosValues : Array[0..2] of Double;
  i : Integer;
  tta : tVarType;
  S : string;

begin
// Lokale Variant Variable im Object THoleShape
   FBodyShape := Value;
// Art der Bohrung
   BohrungsType := FBodyShape.Type; // Type ist in Interface so definiert
// Setze Durchmesser
   Diameter := FBodyShape.Diameter.Value; // Durchmesser der Bohrung im Unterobejct Diameter ist OK
                                          // wird auch Korrekt ausgelesen
//Variantes Array erzeugen
   FPosArray := VarArrayOf([FPosValues[ 0],FPosValues[ 1],FPosValues[ 2]]);
 // zeigt 5 an als Double alles OK weil Typen vom Array = varDouble - TTA ist nur zum Test
   TTA := vartype(FPosArray[0]);
   TTA := vartype(FPosArray[1]);
   TTA := vartype(FPosArray[2]);
// Abfrage - übergabe vom Array an
// procedure GetOrigin(ioOrigin: {??PSafeArray}OleVariant); dispid 1611071508; im Ole Server
// ioOrigion ist laut Hilfe als SafeArrayVariant mit 3 Doublewerten definiert
// Übergabe des Arrays und das Array sollte mit werten gefüllt werden
   FBodyShape.GetOrigin(FPosArray);
// noch mal Array prüfen
   TTA := vartype(FPosArray[0]); //TTA zeigt 5 an als varDouble alles OK
   TTA := vartype(FPosArray[1]);
   TTA := vartype(FPosArray[2]);
// S = Sollte eigentlich Double anzeigen - nur test
   S := varTypeAsString(FPosArray[0]); // zeigt $00Af an = 175

// Die 3 korrekten Bohrungs-Positionen der Bohrung sollten jetzt im Array sein
// sollte 175 - 275 - 0 rauskommen aber alle werte sind 0
   FXpos := FPosArray[0]; // keine Werte
   FYpos := FPosArray[1];
   FZpos := 0;
end;
Das problem liegt nur in Rückgabe von den Korrekten werten im Varianten ARRAY
Alle anderen werte können vom Automatisierung-Server (Catia V5) ausgelesen werden
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Problem mit Variant

  Alt 4. Nov 2008, 20:36
Also, was du übergibst klappt, und was du zrückbekommst klappt nicht?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
ede57

Registriert seit: 5. Apr 2008
Ort: Hamburg
46 Beiträge
 
Delphi XE Professional
 
#5

Re: Problem mit Variant

  Alt 5. Nov 2008, 06:21
Ich kann das Array vorher auch mit werten füllen
Nach der Abfrage sind in dem array die gleichen Werte enthalten
Wurden also nicht geändert bz. zurückgegeben.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Problem mit Variant

  Alt 5. Nov 2008, 09:18
Wie sieht den die Definiton von GetOrigin aus?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
ede57

Registriert seit: 5. Apr 2008
Ort: Hamburg
46 Beiträge
 
Delphi XE Professional
 
#7

Re: Problem mit Variant

  Alt 5. Nov 2008, 09:30
Laut Hilfe so :

Sub GetOrigin( CATSafeArrayVariant ioOrigin)
Returns the origin point which the hole is anchored to.
This point belongs to a tangent plane.
Returns:
oOrigin A Safe Array made up of 3 doubles : X, Y, Z - Hole origin point coordinates
Example:
The following example returns in coordArray the coordinates of hole firstHole:

Call firstHole.GetOrigin coordArray
Set x = coordArray[1]
Set y = coordArray[2]
Set z = coordArray[3]

Ein SafeArray ist so beschrieben:

Defines a CATSafeArrayVariant type to be used by Automation interfaces.
CATSafeArrayVariant are one-dimensional arrays of CATVariants.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Problem mit Variant

  Alt 5. Nov 2008, 10:23
Und wenn du dir ein PSafeArray zurückgeben lässt?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
ede57

Registriert seit: 5. Apr 2008
Ort: Hamburg
46 Beiträge
 
Delphi XE Professional
 
#9

Re: Problem mit Variant

  Alt 5. Nov 2008, 10:35
Es gibt leider keine Funktion die ein PSafeArray zurückgibt

Wenn ich ein Seblst erzeugtes PSafeArray übergebe
dann kommt die Meldung "TypKonlikt"

Die Funktion meckert ja nicht wenn wenn ein
"Variant array of Variant" (was mit VarArrayOf erzeugt wird)
übergeben wird.

Wenn ich das Array mit werten fülle, sind nach aufruf der Funktion
immer nocht die Selben werte drinne. Es wird vom OleServer nichts eingetragen.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#10

Re: Problem mit Variant

  Alt 5. Nov 2008, 11:26
Zitat von ede57:
Laut Hilfe so :

Sub GetOrigin( CATSafeArrayVariant ioOrigin)
Returns the origin point which the hole is anchored to.
This point belongs to a tangent plane.
Returns:
oOrigin A Safe Array made up of 3 doubles : X, Y, Z - Hole origin point coordinates
Example:
The following example returns in coordArray the coordinates of hole firstHole:

Call firstHole.GetOrigin coordArray
Set x = coordArray[1]
Set y = coordArray[2]
Set z = coordArray[3]

Ein SafeArray ist so beschrieben:

Defines a CATSafeArrayVariant type to be used by Automation interfaces.
CATSafeArrayVariant are one-dimensional arrays of CATVariants.
Ich interpretiere das so, daß ein SafeArray zurückgegeben wird, der Server also selbst für die Initialisierung der OleVariant zuständig ist. Versuch also mal den übergebenen Parameter vor dem Aufruf auf unassigned zu setzen. Vielleicht stört sich Catia ja an dem aktuellen Inhalt. Nach dem Aufruf mal mit VarIsArray prüfen, ob es was gebracht hat.
Uwe Raabe
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:18 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