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 2 von 2     12   
ede57

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

Re: Problem mit Variant

  Alt 5. Nov 2008, 13:00
Also wenn ich ein den Parameter als Unassigned übergebe
sagt Catia falscher variablen Typ

Mit VB funktioniert es so :

Dim P (3) as Variant

dann kann ich mit z.b. Wert = p(3) auf die werte zugreifen
und es funktioniert. Bloß mit Delphi funzt es nicht
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Problem mit Variant

  Alt 5. Nov 2008, 13:21
Ja, Delphi hat leider eine eigene Implementation über das SafeArray gesetzt (ist jetzt die Frage, ob das SafeArray oder das VarArray eher war). Bisher habe ich dann immer das die WinAPI-Funktionen zum SafeArray genutzt und nicht die VarArray-Sachen von Delphi.


Zitat:
Wenn ich ein Seblst erzeugtes PSafeArray übergebe
dann kommt die Meldung "TypKonlikt"
Das hat noch nichts zu sagen. Manchmal muss man das umgehen.

Kannst du einen Pointer übergeben? (unabhängig davon, ob dann ein sinnvoler Inhalt zurückkommt)
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
 
#13

Re: Problem mit Variant

  Alt 5. Nov 2008, 20:00
Nein !

Sobald irgendwas anderes übergeben wird kommen Meldungen
wie " TypKonflikt" oder "Arguemnt nicht erlaubt"

bei der Übergabe wird ja sonst nicht gemeckert, bloß es kommen nicht die
werte raus die es sein sollen

In VB funktioniert es ja alles, dann sollte es ja auch
in Delphi Funktionieren. Oder ??
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Problem mit Variant

  Alt 7. Nov 2008, 08:46
Ja, sollte es. Und wird es auch.

Kannst du mal die *_TLB.Pas anhängen?
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
 
#15

Re: Problem mit Variant

  Alt 7. Nov 2008, 12:37
Im anghang die tlb.pas datei.

Auf alle daten in den Objecten kann man ja zugreifen
bloß nicht auf diese verdammten Arrays
Wenn man ein Array(An einer anderen stelle) und mit werten füllt
werden die werte auch angenommen.
Angehängte Dateien
Dateityp: zip partitf_tlb_619.zip (17,9 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Problem mit Variant

  Alt 7. Nov 2008, 13:31
Kannst du anstatt "HoleDisp" auch das Interface "Hole" verwenden. Dort wird ja eindeutig ein PSafeArray übergeben.

Das PSafeArray ist übrigens in deinem VarArray drin gespeichert. Delphi setzt quasi auf das SafeArray seine Struktur nochmal drauf (ähnlich wie beo OleVariant)
Vielleicht versuchst du TVarData(malFPosArray).vArray als Pointer zu übergeben.
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
 
#17

Re: Problem mit Variant

  Alt 7. Nov 2008, 20:37
Im interface Hole ist eine PsafeArray

Wenn ich eine Variable von Hole erzeuge meckert Delphi rum

E2010: Inkompatible Typen: Hole und Olevariant

in einem Script mit VB funtioniert es ja

DIM FPosValue(3) as Variant
dann die funktion FBodyShape.GetOrigin(FposValue) aufrufen
und alle werte sind eingetragen
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Problem mit Variant

  Alt 8. Nov 2008, 15:30
VB und SafeArray sind ja beide Microsoft-Erfindungen. Die funktionieren natürlich problemlos miteinander. Ist genauso, als würdest du eine DLL mit einem Delphi-typischen String anbieten. Damit hätten auch alle anderen Programmiersprachen Probleme (deswegen macht man sowas ja auch nicht).

In Delphi ist ein VarArray ein wenig anders als ein reines SafeArray. Du musst eben einfach nur wissen, welchen Teil die jetzt genau wollen (oleVariant sagt ja leider nichts aus).

Zitat:
E2010: Inkompatible Typen: Hole und Olevariant
???
Ich meine -> FBodyShape als Hole
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
 
#19

Re: Problem mit Variant

  Alt 9. Nov 2008, 22:37
Es ist egal was ich mache es gibt immer die meldung
" Typkonflikt " oder
"Inkompatible typen"

An einer anderen Stelle im Programm übergeb ich auch ein Array der gleichen
Art mit werten. Die werte kommen alle Korrekt rüber.
Wenn ich die Werte auf null setze und dann wieder auslese
bleiben die Werte null.

Delphi-Quellcode:
 
 Move = interface(AnyObject)
    ['{8DB9CA92-9403-11D1-A5E2-00A0C95AF74C}']
    function Get_MovableObject: Move; safecall;
    procedure Apply([u]iTransformationArray: PSafeArray[/u]); safecall;
    property MovableObject: Move read Get_MovableObject;
  end;
Irgendwie scheint die Funktion im Interface nicht Korrekt zu sein
Leider kann ich kein C++ womit ich es auch ausprobieren könnte.
  Mit Zitat antworten Zitat
ede57

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

Re: Problem mit Variant

  Alt 12. Nov 2008, 11:53
Habe alles gegeben
Habe ein Testproject mit C++ Builder 2007 erstellt
----- C++ Code

Variant CatApp;
Variant CatDocList;
Variant CatDoc;
Variant CatDocPart;
Variant CatDocBodies;
Variant CatBodiesBody;
Variant CatBodieShapes;
Variant CatShape;
Variant ShapePoints;
double points[3];
int bounds[2] = {0,2};
unsigned short vx;
String name;
//---------------------------------------------------------
CatApp = GetActiveOleObject("Catia.Application");
CatDocList = CatApp.OlePropertyGet("Documents");
CatDoc = CatDocList.OleFunction("Item",1);
CatDocPart = CatDoc.OlePropertyGet("Part");
CatDocBodies = CatDocPart.OlePropertyGet("Bodies");
CatBodiesBody = CatDocBodies.OleFunction("Item",1);
CatBodieShapes = CatBodiesBody.OlePropertyGet("Shapes");
CatShape = CatBodieShapes.OleFunction("Item",3);
name = CatShape.OlePropertyGet("Name");
Memo1->Lines->Add(name); // its OK
ShapePoints = VarArrayCreate(bounds,1,varVariant);
// SafeArrayRedim(*ShapePoints.VArray,AB);
vx == TVarData(ShapePoints).VType; // its 0x200C
CatShape.OleFunction("getOrigin",ShapePoints);
vx == TVarData(ShapePoints).VType; // its 0x200C
points[0] = ShapePoints.GetElement(0);
Memo1->Lines->Add(FloatToStr(points[0])); // its 0 not 185
----------------------------

Keinen Erfolg

Dann habe ich jetzt das testproject mal mit Visaul Basic 2008 erstellt
----------VB Code
Private Testprocedure
Dim CatApp As Object
Dim catDocs As Object
Dim CatDoc As Object
Dim CatPart As Object
Dim CatBodies As Object
Dim CatBody As Object
Dim CatbodyShapes As Object
Dim CatShape As Object
Dim name As String
Dim BPoints(3) As Object
;-----------------------------------------
CatApp = CreateObject("Catia.Application")
catDocs = CatApp.Documents
CatDoc = catDocs.Item(1)
CatPart = CatDoc.Part
CatBodies = CatPart.Bodies
CatBody = CatBodies.Item(1)
CatbodyShapes = CatBody.Shapes
CatShape = CatbodyShapes.Item(3)
name = CatShape.name
ListBox1.Items.Add(name)
CatShape.GetOrigin(BPoints)
ListBox1.Items.Add(FormatNumber(BPoints(0)))
ListBox1.Items.Add(FormatNumber(BPoints(1)))
ListBox1.Items.Add(FormatNumber(BPoints(2)))
End Sub
----------VB Code
Kann alle Werte Ohne Probleme auslesen
Warum nicht mit Delphi 2007 oder C++ Builder 2007
  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 13:45 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