Autor
|
Thema: .Net-dlls für CATIA V5 (3551 mal gelesen)
|
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 22. Jan. 2008 14:23 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, in .net (2005) funktioniert das Überwachungsfenster nicht mehr korrekt, sofern die .dlls von CATIA unter Verweise > Hinzufügen > COM angezogen werden, da es sich bei den .COM-Objekten nicht um Managed Native Code (.net-dlls) handelt. Frage: Stellt CATIA ( R18,17,16 ) bzw. Dassault .net-dlls zur Verfügung? Wenn ja, wo? Unter Verweise > Hinzufügen > .Net sind keine zu finden. Müssen diese erst separat installiert werden? Gibt es überhaupt schon welche? Das Problem mit den .COM-dlls ist folgendes: Es ist nicht möglich (wie in VB6.0) durch die Knoten des Strukturbaums im Überwachungsfenster zu navigieren, da ohne ein explizites Dim in der Wertangabe des Objektes im Überwachungsfenster nur System.__ComObject zu finden ist. Es werden auch gar nicht alle Methoden angezeigt, d.h. bei folgendem Beispiel Public oCATIA As INFITF.Application
oCATIA = System.Runtime.InteropServices.Marshal.GetActiveObject("CATIA.Application") Dim oActDoc as Document = oCATIA.ActiveDocument wird im Überwachungsfenster für das Object oActDoc kein Knoten .Products angezeigt. Problem ist wie gesagt, das die Interop.INFITF (CATIA V5 InfInterfaces Object Library) vom Dateityp ActiveX (also COM) und nicht .Net ist. Kann jemand helfen? Gruß TomTom ------------------ tomtom1972
[Diese Nachricht wurde von tomtom1972 am 22. Jan. 2008 editiert.] [Diese Nachricht wurde von tomtom1972 am 22. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 22. Jan. 2008 22:40 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Hallo TomTom, ich habe mal was mit vb2005 rumgespielt und es scheint so zu sein, bei deinem Beispiel .Product nur dann auftaucht, wenn due Deklaration in der richtigen Klasse - also "Dim product As ProductStructureTypeLib.Product" gemacht wurde. Im Intellisense taucht am Objekt die Eigenschaft .Product leider nicht auf. Allerdings war das zu vb2003-Zeiten auch nicht besser. Man muss leider immer noch wissen, wie man in V5 an die Eigenschaften dran kommt und in welcher Klasse sie sich verstecken SG Jens Hansen ------------------ Inoffizielle CATIA-Hilfeseite Private Seite Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAMiCADse Mitglied
Beiträge: 177 Registriert: 17.02.2006 V5,R19,SP9
|
erstellt am: 23. Jan. 2008 11:25 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Hallo TomTom, ich nutze hauptsächlich VB2005. Die fehlende Objektauflösung in der Klassenstruktur ist sicherlich ärgerlich, aber für mich kein Grund nur mit VBA zu arbeiten (VB6 ist nicht vorhanden). Auf die .NET-dll's warte ich auch schon lange. Bis einschließlich R18 ist davon aber noch nichts zu sehen. Ich hoffe dann vor allem auch auf einen Performance-Schub, denn je Art der Anwendung (Anzahl der Zugriffe auf CATIA-Objekte) ist die Performance mit .NET gegenüber VBA doch signifikant schlechter (das Wrappen/Marshallen dauert eben). Langfristig gesehen ist die COM-Schnittstelle tot, ich befürchte nur, dass solange COM noch von Windows unterstützt wird, solange wird Dassault wohl keinen Bedarf sehen, an ihrer API etwas zu ändern... Gruß CAMiCADse [Diese Nachricht wurde von CAMiCADse am 23. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 24. Jan. 2008 08:13 <-- editieren / zitieren --> Unities abgeben:
Moin CAMiCADse, danke für deine Antwort. Ich bin von vb6.0 auf .net gewechselt und trauere der Objektauflösung im Watch von vb6 doch ein wenig nach. Das navigieren durch den Baum / die CATIA-Objektstruktur war manchmal sehr aufschlussreich. Das .net langsammer als vb6 ist, kann ich selbst nicht feststellen, aber die Schlußfolgerung liegt nahe, solange alles in .net über die .COM Schnittstelle läuft. Das .net UND vb6 langsammer als vba sind liegt in der Natur der Sache, da sie im Gegensatz zu vba eigenständige Prozesse sind und anders abgearbeitet werden. Dazu gibts schöne Erläuterungen von Dassault selbst. Um aber zu den .net dlls zurückzukommen: Handelt es sich um eine Vermutung deinerseits, das bis einschliesslich R18 nix verfügbar ist (ich würde dem zustimmen, da ich auch nichts finden kann) oder gibts die Info irgendwo auch als "offiziellen" Hinweis von IBM/Dassault ? Gruß TomTom ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAMiCADse Mitglied
Beiträge: 177 Registriert: 17.02.2006 V5,R19,SP9
|
erstellt am: 24. Jan. 2008 12:58 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
|
lles Mitglied Admin
Beiträge: 110 Registriert: 22.09.2006
|
erstellt am: 16. Mrz. 2009 17:30 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Ich habe mit VB2008 Express Edition ein paar Makros geschrieben. Diese laufen ohne Probleme auf ca. 30 Rechnern. Auf zwei Rechnern allerdings fkt. die Makros nicht. Ich besorge mir auf folgendem Weg das CATIA Object: Public CATIA As INFITF.Application Sub CATIACheck() CATIA = Nothing Try CATIA = System.Runtime.InteropServices.Marshal.GetActiveObject("CATIA.Application") Catch If CATIA Is Nothing Then MessageBox.Show("OBJECT NOT FOUND" , "ERROR", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End End If End Try End Sub Auf den beiden Rechnern wo die Makros nicht laufen, wird das CATIA Object nicht gefunden. Leider ist die IDE nicht auf jedem Rechner installiert, sodass man auf den Rechnern wo der Fehler auftritt nicht debuggen kann. Wir verwenden WinXP 64Bit mit CATIA V5R16SP4 Hotfix 61 ebenfalls 64Bit Installation ist lokal Net Framework 3.5 SP1 ist installiert Es gibt ja noch mehrere Möglichkeiten wie man sich das CATIA Object holen kann, die werde ich dann wohl mit der Exception Handling verbinden und hoffen das es fkt. Hat jemand eine Idee wo das Problem liegen könnte, das das CATIA Object nicht gefunden wird, bzw. Ansätze um eine Lösung zu finden? Gruß lles 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: 16. Mrz. 2009 21:34 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Hallo lles, auf den Rechnern fehlt die Registrierung von CATIA in der Windows Registry. Einfach in den Ordner der cnext.exe wechseln und "cnext.exe /regserver" eingeben. ------------------ ----------- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lles Mitglied Admin
Beiträge: 110 Registriert: 22.09.2006
|
erstellt am: 17. Mrz. 2009 08:32 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
|
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 17. Mrz. 2009 12:07 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Hallo lles, springt er in der Zeile mit dem Getobject raus? Dann muss es eigentlich an der Registrierung liegen! Habt Ihr cnext.exe /regserver als admin ausgeführt? Liegt in der Registry ein Eintrag für Catia.application vor? Könnt ihr mit Doppleklick auf ein CATPart Catia starten? Evtl. mal voher "cnext.exe /unregserver" eingeben. ------------------ ----------- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lles Mitglied Admin
Beiträge: 110 Registriert: 22.09.2006
|
erstellt am: 17. Mrz. 2009 12:56 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Mit einem Doppelklick sind einzelne Dateien zu laden. Von daher sollte alles registriert sein, die Icons sind im Windows Explorer auch da. Ich denke er kann nur in der Zeile mit GetObject in einen Fehler laufen, weil gleich nach dem Makrostart genau die Messagebox (OBJECT NOT FOUND) erscheint.
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: 17. Mrz. 2009 17:16 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Hallo lles, vielleicht muss man sich dann mal die Arbeit machen und dort Visual Studio installieren, um den Code im Debugger durchzugehen. Vielleicht kann man aus der Fehlermeldung was rauskriegen. Passt die Version der DLL'S zu dem Release der Catia Installation auf dem Rechner? Sprich hast Du die INterop-Dll's mit demselben Release erzeugt? ------------------ ----------- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lles Mitglied Admin
Beiträge: 110 Registriert: 22.09.2006
|
erstellt am: 17. Mrz. 2009 18:13 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
|
noir333 Mitglied Ingenieur
Beiträge: 148 Registriert: 27.01.2004 Dell Precision 450 Dual Xeon, 2MB RAM, XP SP2, NX3 V5R17SP3
|
erstellt am: 17. Mrz. 2009 19:17 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Hallo lles, hm.. das macht mich stützig, normalerweise verhindert das Sicherheitsmanagement von .NET ein starten einer EXE-Datei auf einem Netzlaufwerk. Normalerweise laufen die EXE-Dateien nur von lokalem Laufwerk, es sei denn das Netzlaufwerk wird als "sicher" mit .Net deklariert. Ich verwende immer eine batch-Datei, die das Programm ins lokale Netz kopiert und dort startet: xcopy /D /S /C /Y *.* %temp%\Programm1\ start %temp%\Programm1\Programm1.exe exit Aber ich kann mir nicht vorstellen, warum das Programm in der GetObject-Zeile abbricht, das passt nicht zusammen. Läuft es denn von lokalem Laufwerk? ------------------ ----------- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lles Mitglied Admin
Beiträge: 110 Registriert: 22.09.2006
|
erstellt am: 18. Mrz. 2009 10:19 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Lokal gestartet, fkt. die Makros mit dll Dateien auch nicht. Im Sicherheitsmanagement von VB2008EE habe ich keine Änderungen vorgenommen, alles auf Standard gelassen. VB2008EE erzeugt beim kompilieren der Makros unter anderem die Datei "Interop.INFITF.dll". Gibt es irgendwo eine identische Dll von CATIA, so dass man die mal vergleichen könnte? Im Catia\...\bin Verzeichnis habe ich nichts brauchbares gefunden um z.B. erst mal die Größe der DLL's zu vergleichen.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
makebeth Mitglied
Beiträge: 12 Registriert: 21.03.2009 Dell Precision T3400; Vista x64; CATIA V5 R16 32Bit;
|
erstellt am: 23. Mrz. 2009 06:49 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Zitat: Original erstellt von Jens Hansen: ich habe mal was mit vb2005 rumgespielt und es scheint so zu sein, bei deinem Beispiel .Product nur dann auftaucht, wenn due Deklaration in der richtigen Klasse - also "Dim product As ProductStructureTypeLib.Product" gemacht wurde. Im Intellisense taucht am Objekt die Eigenschaft .Product leider nicht auf.
hallo zusammen, das intellisense für 'document' keine eigenschaft namens 'product' anzeigt liegt daran, dass es diese nicht hat. wenn das dokument als 'productdocument' deklariert wird taucht hier auch alles gewünschte auf. ich arbeite mit sharpdevelop, was aber keinen unterschied machen dürfte. trotz dass der eintrag im intellisense nicht auftaucht schluckt so mancher rechner 'document.product' und ein anderer nicht. woran das liegt habe ich noch nicht heraus gefunden. Code: Dim pdDocument As productdocument Dim pRootProduct As product pRootProduct = pdDocument.product
siehe auch hier Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 23. Mrz. 2009 18:23 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Hallo makebeth, es liegt vielleicht an Option Strict, eine Einstellung am .NET Projekt. Es hindert Late binding, also alles muss schon beim Kodieren den richtigen Datentyp haben. Was man mit ActiveDocument machen kann ist z.B. folgendes:
Code: Dim oDoc as Document = CATIA.ActiveDocument dim oPartDoc as PartDocument = Nothing dim oProductDoc as ProductDocument = Nothing dim oProduct as Product = Nothing if TypeName(oDoc).Equals("PartDocument") then oPartDoc = CType(oDoc, PartDocument) 'Typumwandlung oProduct = oPartDoc.Product elseif TypeName(oDoc).Equals("ProductDocument") then oProductDoc = CType(oDoc, ProductDocument) oProduct = oProductDoc.Product end if 'ab hier mit oProduct weiterarbeiten
Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |