Autor
|
Thema: Visual Studio 2005 - VB.net Was mach ich falsch? (2636 mal gelesen)
|
JuergenHeckmann Mitglied Student
Beiträge: 17 Registriert: 29.04.2007
|
erstellt am: 29. Okt. 2007 16:07 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Ich bin grad dabei in Visual Studio 2005 ein Programm zum Ansteuern von Catia zu schreiben... Leider tritt bei mir immer folgender Fehler auf: Nachdem ich mein aktives Part bekommen durch "GetCATIAPartDocument" bekommen hab und mir nen Hybridbody erstellen will, bekomm ich immer die Fehlermeldung: Zitat: Eine nicht behandelte Ausnahme des Typs "System.Runtime.InteropServices.COMException" ist in Microsoft.VisualBasic.dll aufgetreten.Zusätzliche Informationen: Das Verfahren Item ist fehlgeschlagen
Was ist hierbei mein Fehler? Ich hatte vorher den Code in VB von Excel geschrieben und da hat es ohne Probleme funktioniert... Hier ist der Codeausschnitt, der den Fehler produiert:
Code: 'Get CATIA Dim PtDoc As Object PtDoc = GetCATIAPartDocument() 'Get HybridBody Dim myHBody As Object 'Hier tritt der Fehler auf: myHBody = PtDoc.Part.HybridBodies.Item("GeometryFromXFLR")
MfG Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 29. Okt. 2007 17:56 <-- editieren / zitieren --> Unities abgeben: Nur für JuergenHeckmann
Hallo Jürgen, ich weiss zwar nicht was "PtDoc = GetCATIAPartDocument()", aber ich gehe davon aus, dass dies eine Function ist, die Dir das aktuelle Document aus Catia holt. Zum Erzeugen musst Du dann myHBody = PtDoc.Part.HybridBodies.Add und myHBody.Name="GeometryFromXFLR" zum Benennen eingeben. mit Item kannst Du nur vorhandene HBodies ansprechen.
------------------ ----------- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JuergenHeckmann Mitglied Student
Beiträge: 17 Registriert: 29.04.2007
|
erstellt am: 30. Okt. 2007 12:30 <-- editieren / zitieren --> Unities abgeben:
Hallo! Vielen Dank für die Antwort... Das funktioniert schon mal sehr gut :-) Jetzt hab ich nur ein 2. Problem, was bei meinem vorherigen Code auch nicht aufgetreten war: Ich füge eine Reihe von Punkten ein, was auch noch funktioniert. Diese Punkte möchte ich dann einem Spline hinzufügen. Hierbei kommt immer folgende Fehlermeldung: Zitat: Eine nicht behandelte Ausnahme des Typs "System.Runtime.InteropServices.COMException" ist in Microsoft.VisualBasic.dll aufgetreten.Zusätzliche Informationen: Typkonflikt. (Ausnahme von HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))
Ich kann leider nirgends etwas über HRESULT finden... mein code an dieser stelle sieht folgender maßen aus: Code: Do 'Add new Point into document PassingPtArray(index) = PtDoc.Part.HybridShapeFactory.AddNewPointCoord(foil.dAFoilcoordiantes(0, index), foil.dAFoilcoordiantes(1, index), foil.dAFoilcoordiantes(2, index)) myHBody.AppendHybridShape(PassingPtArray(index)) index = index + 1 Loop Until (index = foil.intCoordinatenumber - 1) 'Start building spline 'Are there enough points ? If (index < 2) Then
MsgBox("Not enough points for a spline. Spline deleted") Else Spline = PtDoc.Part.HybridShapeFactory.AddNewSpline Spline.SetSplineType(0) Spline.SetClosing(0) 'Creates and adds points to the spline intCount = 0 Do ReferenceOnPoint = PtDoc.Part.CreateReferenceFromObject(PassingPtArray(intCount)) Spline.AddPointWithConstraintExplicit(ReferenceOnPoint, Nothing, -1, 1, Nothing, 0)
intCount = intCount + 1 Loop Until intCount = index - 1 myHBody.AppendHybridShape(Spline)
Woran könnte das liegen? Gruß Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JuergenHeckmann Mitglied Student
Beiträge: 17 Registriert: 29.04.2007
|
erstellt am: 31. Okt. 2007 01:05 <-- editieren / zitieren --> Unities abgeben:
Hallo miteinander! Ich hab rausgefunden, dass der Fehler in folgender Zeile auftritt: Code: ReferenceOnPoint = PtDoc.Part.CreateReferenceFromObject(PassingPtArray(intCount))
Und zwar, durchläuft er einmal die Schleife und bricht danach ab... In meinem PassingPtArray stehen alles Com Objekte drin... Ich weiss daher nicht, was nun bei m 2. durchlauf anders sein soll, als bei m ersten Gruß Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 31. Okt. 2007 09:44 <-- editieren / zitieren --> Unities abgeben: Nur für JuergenHeckmann
Hallo Jürgen, versuch mal vor dem Erzeugen des Splines ein part.update damit alle Punkte upgedatet werden, die Du erzeigt hast, vorher kann man mit denen manchmal nicht weiter arbeiten! ------------------ ----------- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JuergenHeckmann Mitglied Student
Beiträge: 17 Registriert: 29.04.2007
|
erstellt am: 31. Okt. 2007 09:52 <-- editieren / zitieren --> Unities abgeben:
Auch mit nem update vorher funktionierts leider nich... :-( Ich bin da grad n bissl am verzweifeln... Ich kann mir eigentlich fast nich vorstellen, das VBA von Excel und VB.net soweit auseinander gehn... Ich werd mir mal schaun, ob ich darüber in unser Bibliothek n gutes Buch find... Gruß Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JuergenHeckmann Mitglied Student
Beiträge: 17 Registriert: 29.04.2007
|
erstellt am: 31. Okt. 2007 15:03 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmal... Ich muss mich korrigieren... Das Problem ist nicht die referenz zuweisung sondern erst die Zeile
Code: Spline.AddPointWithConstraintExplicit(ReferenceOnPoint, Nothing, -1, 1, Nothing, 0)
Er durchläuft die schleife auch nicht einmal sondern bricht schon bei dem ersten durchgang ab... Gruß Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 31. Okt. 2007 16:59 <-- editieren / zitieren --> Unities abgeben: Nur für JuergenHeckmann
Hallo Jürgen, hier mal eine meiner Zeilen die das gleiche macht:
Code:
spl1.AddPointWithConstraintExplicit(refp1, Nothing, -1.0, 1, Nothing, 0.0)
Vielleicht macht das ja einen Unterschied, mit dem 1.0 ,weil diese Größen Double sein müssen, probier mal.... Ergänzung: ist der Spline auch als HybridShapeSpline deklariert? ------------------ ----------- [Diese Nachricht wurde von noir333 am 31. Okt. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JuergenHeckmann Mitglied Student
Beiträge: 17 Registriert: 29.04.2007
|
erstellt am: 01. Nov. 2007 01:24 <-- editieren / zitieren --> Unities abgeben:
Hallo! Hier ist jetzt mal die komplette spline sub von mir... die variable foil ist einfach ein struct in dem nen array mit coordinaten drin ist und die Anzahl der Koordinaten gespeichert ist. Deklariert hab ich doch den spline durch forgende zeile, oder? Spline = PtDoc.Part.HybridShapeFactory.AddNewSpline Code: Sub CreationSpline(ByVal foil As foil, ByVal Spline As Object) Dim index As Integer Dim intCount As Integer Dim PassingPtArray(foil.intCoordinatenumber - 1) As Object Dim ReferenceOnPoint As Object 'Get CATIA Dim PtDoc As Object PtDoc = GetCATIAPartDocument() 'Get HybridBody Dim myHBody As Object myHBody = PtDoc.Part.HybridBodies.Add myHBody.Name = "imported data" index = 0 Do 'Add new Point into document PassingPtArray(index) = PtDoc.Part.HybridShapeFactory.AddNewPointCoord(foil.dAFoilcoordiantes(0, index), foil.dAFoilcoordiantes(1, index), foil.dAFoilcoordiantes(2, index)) myHBody.AppendHybridShape(PassingPtArray(index)) index = index + 1 Loop Until (index = foil.intCoordinatenumber) PtDoc.Part.Update() 'Start building spline 'Are there enough points ? If (index + 1 < 2) Then MsgBox("Not enough points for a spline. Spline deleted") Else Spline = PtDoc.Part.HybridShapeFactory.AddNewSpline Spline.SetSplineType(0) Spline.SetClosing(0) 'Creates and adds points to the spline intCount = 0 Do ReferenceOnPoint = PtDoc.Part.CreateReferenceFromObject(PassingPtArray(intCount)) Spline.AddPointWithConstraintExplicit(ReferenceOnPoint, Nothing, -1.0, 1, Nothing, 0.0)
intCount = intCount + 1 Loop Until (intCount = foil.intCoordinatenumber - 1) myHBody.AppendHybridShape(Spline) End If PtDoc.Part.Update() End Sub
Leider hat das mit dem 1.0 statt 1 nicht geklappt. Es muss aber wirklich so sein, dass ich irgend ne n falschen typ übergebe. Die Fehlermeldung gibt mir als Zusatzinfo zurück: Typkonflikt Gruß Jürgen
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 01. Nov. 2007 13:01 <-- editieren / zitieren --> Unities abgeben: Nur für JuergenHeckmann
Hallo Jürgen, also Du hast Spline als Object deklariert! Versuch mal: Code:
Sub CreationSpline(ByVal foil As foil, ByVal Spline As HybridShapeSpline)
Außerdem bin ich mir nicht sicher, dass das mit dem "ByVal" so in Ordnung ist. Eigentlich dürfen ByVal definierte Variablen nicht in der SUB verändert werden, evtl. mal ByRef versuchen. ReferenceonPoint hast Du auch als "Object" deklariert, das muss aber "reference" sein. Also: Du solltest alle Catia Objekte genauso deklarieren, was sie sind: Dim linie as HybrdiShapeline Dim Spline as HybridshapeSpline Dim Point as hybridshapepointon Coord etc... Wenn Du mal nicht im voraus weist, welcher Typ es sein wird, dann solltest Du "AnyObject" verwenden (für Catia-Objekte) , NICHT Object. ------------------ ----------- [Diese Nachricht wurde von noir333 am 01. Nov. 2007 editiert.] [Diese Nachricht wurde von noir333 am 01. Nov. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JuergenHeckmann Mitglied Student
Beiträge: 17 Registriert: 29.04.2007
|
erstellt am: 01. Nov. 2007 13:33 <-- editieren / zitieren --> Unities abgeben:
Hi! Mein Problem mit dem deklarieren wie z.b. "...as reference" ist, dass ich immer gesagt bekomme "typ nicht deklariert" was mir irgendwo auch klar ist, da vb ja nicht von vornherein die catiaspezifischen variablen kennen kann. ich hatte eben auch das selbe problem als ich mit VBA programmiert hatte und dann hab ich das alle Catiaspezifischen variablen als objekte deklariert und dann hatte es funktioniert. Merkwürdig... nun ja... muss ja da irgend ne dll oder so von catia vorher einbinden, damit das funktioniert? wenn ja, mit welchem befehl mach ich n das?? (sorry, dass ich so viele fragen stell, aber ich steh noch relativ am anfang der programmierung mit Catia) MfG Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 01. Nov. 2007 14:14 <-- editieren / zitieren --> Unities abgeben: Nur für JuergenHeckmann
Hallo Jürgen, hat mich gewundert, dass Du überhaupt was zum laufen bekommen hast! Also: Um auf die Catia-Objekte zugreifen zu können musst Du die TLB'S zum Projekt hinzufügen: 1. Eigenschaften des Projektes öffnen: Projekt -> Test1-Eigenschaften -> Verweise 2. Catia Bibliotheken hinzufügen: Knopf "Hinzufügen" drücken und unter "Durchsuchen" den Pfad zu den Catia-Bibliotheken angeben. (z.B. "C:\Program Files\Dassault Systemes\B16\intel_a\code\bin" Achtung! Release beachten!) 3. Die Dateien "CATGitTypeLib.tlb" "InfTypeLib.tlb" "MecModTypeLib.tlb" "PartTypeLib.tlb" "SPATypeLib.tlb" auswählen und mit OK bestätigen. Dann in dem Fenster darunter alle neuen Libs mit Haken versehen. Siehe Screenshot. ------------------ ----------- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
forrestq Mitglied student
Beiträge: 4 Registriert: 06.12.2007
|
erstellt am: 06. Dez. 2007 13:48 <-- editieren / zitieren --> Unities abgeben: Nur für JuergenHeckmann
|
JuergenHeckmann Mitglied Student
Beiträge: 17 Registriert: 29.04.2007
|
erstellt am: 06. Dez. 2007 13:54 <-- editieren / zitieren --> Unities abgeben:
Hallo, Erstmal noch Danke an noir333!!! Es funktioniert jetzt alles und ich kann mich nun neuen Herausforderungen stellen ;-) @forrestq: Was bekommst du denn für Fehler angezeigt? und welchen code genau, hast du versucht laufen zu lassen? Gruß Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
forrestq Mitglied student
Beiträge: 4 Registriert: 06.12.2007
|
erstellt am: 06. Dez. 2007 14:25 <-- editieren / zitieren --> Unities abgeben: Nur für JuergenHeckmann
@ Jürgen hier ist der code: Sub CreationSpline(ByVal foil As foil, ByVal Spline As HybridShapeSpline) Dim index As Integer Dim intCount As Integer Dim PassingPtArray(foil.intCoordinatenumber - 1) As Object Dim ReferenceOnPoint As Object Dim line As HybrdiShapeline Dim Spline As HybridshapeSpline Dim Point as hybridshapepointon Coord 'Get CATIA Dim PtDoc As Object PtDoc = GetCATIAPartDocument() 'Get HybridBody Dim myHBody As Object myHBody = PtDoc.Part.HybridBodies.Add myHBody.Name = "imported data" index = 0 Do 'Add new Point into document PassingPtArray(index) = PtDoc.Part.HybridShapeFactory.AddNewPointCoord(foil.dAFoilcoordiantes(0, index), foil.dAFoilcoordiantes(1, index), foil.dAFoilcoordiantes(2, index)) myHBody.AppendHybridShape(PassingPtArray(index)) index = index + 1 Loop Until (index = foil.intCoordinatenumber) PtDoc.Part.Update() 'Start building spline 'Are there enough points ? If (index + 1 < 2) Then MsgBox("Not enough points for a spline. Spline deleted") Else Spline = PtDoc.Part.HybridShapeFactory.AddNewSpline Spline.SetSplineType(0) Spline.SetClosing(0) 'Creates and adds points to the spline intCount = 0 Do ReferenceOnPoint = PtDoc.Part.CreateReferenceFromObject(PassingPtArray(intCount)) Spline.AddPointWithConstraintExplicit(ReferenceOnPoint, Nothing, -1.0, 1, Nothing, 0.0)
intCount = intCount + 1 Loop Until (intCount = foil.intCoordinatenumber - 1) myHBody.AppendHybridShape(Spline) End If PtDoc.Part.Update() End Sub aso nur kopiert was da war. fehler: keine sub main sag er Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JuergenHeckmann Mitglied Student
Beiträge: 17 Registriert: 29.04.2007
|
erstellt am: 09. Dez. 2007 16:10 <-- editieren / zitieren --> Unities abgeben:
nun ja... das ist eben nur eine sub meines programmes... das ganze programm hat mittlerweile ein paar tausend zeilen code.. das nächste ist, dass ich eigene strukturen benutze hier z.b. die struktur "foil". Gruß Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |