Autor
|
Thema: Late Binding Visual Basic 2008 (1774 mal gelesen)
|
tobiley Mitglied Masterstudent
Beiträge: 59 Registriert: 15.02.2010 Win XP CatiaV5 R17, R18, R19 HD2-Lizenz VB2008
|
erstellt am: 06. Jun. 2011 16:31 <-- editieren / zitieren --> Unities abgeben:
Hallo, Ich habe das Buch CATIA V5 automatisieren gelesen. Und bin gerade dabei mich in das Late Bindung einzuarbeiten. Das klappt soweit eigentlich auch ganz gut, ich stolpere hin und wieder aber über ein paar befehle die ich nicht ins Late Binding übertragen bekommen. Kann mir jemand sagen wie der Befehl "CATIA.ActiveDocument.Product.ApplyWorkMode(CatWorkModeType.DESIGN_MODE)" im Late Binding aussehen muss. Mit Code:
param(0) = "CatWorkModeType.DESIGN_MODE" lb_methode(MyProduct, "ApplyWorkMode", param) Sub lb_methode(ByVal ob As Object, ByVal Befehl As String, ByVal param As Object()) lb_result = ob.GetType().InvokeMember(Befehl, BindingFlags.InvokeMethod Or BindingFlags.OptionalParamBinding, Nothing, ob, param) End Sub
hats nicht geklappt. Oder habe ich prinzipiell einen Fehler im Aufbau?Vielen Dank für eure Hilfe! Grüße Tobi [Diese Nachricht wurde von tobiley am 06. Jun. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
INLU Mitglied Konstrukteur Automotive
Beiträge: 71 Registriert: 01.03.2008
|
erstellt am: 07. Jun. 2011 09:16 <-- editieren / zitieren --> Unities abgeben: Nur für tobiley
Hallo tobiley, ich hatte das gleiche Problem. Ich habe mich komplett von der Variante lb_get und lb_set als Prozedur getrennt. Seit VBS 2008 ist es anscheinend auch leichter Late Binding umzusetzen. Wenn ich heute Nachmittag Zuhause bin, poste ich dir ein paar Beispiele. Den Code habe ich nur Zuhause und aus dem Kopf kriege ich das nicht hin. Mfg Lars Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tobiley Mitglied Masterstudent
Beiträge: 59 Registriert: 15.02.2010 Win XP CatiaV5 R17, R18, R19 HD2-Lizenz VB2008
|
erstellt am: 07. Jun. 2011 18:55 <-- editieren / zitieren --> Unities abgeben:
|
tobiley Mitglied Masterstudent
Beiträge: 59 Registriert: 15.02.2010 Win XP CatiaV5 R17, R18, R19 HD2-Lizenz VB2008
|
erstellt am: 09. Jun. 2011 14:55 <-- editieren / zitieren --> Unities abgeben:
Probleme habe ich eigentlich nur bei Befehlen bei denen ein "Parameter mit "." übergeben werden muss. Wie oben bei "CatWorkModeType.DESIGN_MODE" oder "CatVisPropertyShow.catVisPropertyNoShowAttr". Mit dem implizieten Late Binding komme ich da auch ncit weiter weil er dann immer meckert wenn ich die oben aufgeführten Konstanten einsetze und diese als unbekannt unterkringelt. Wenn Lars doer irgendwer anders mir dabei helfen könnte, wäre mir sehr geholfen! Vielen Dank euch schonmal. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
INLU Mitglied Konstrukteur Automotive
Beiträge: 71 Registriert: 01.03.2008
|
erstellt am: 10. Jun. 2011 09:08 <-- editieren / zitieren --> Unities abgeben: Nur für tobiley
Sorry, habe dich total vergessen! Heute Nachmittag schaffe ich es aber. Aber vielleicht kannst du mal ein Beispiel posten für lb_get oder lb_set mit dem Aufruft dazu. Ich habe es damals nicht hin bekommen! mfg Lars Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tstone Mitglied Werkzeugkonstrukteur
Beiträge: 163 Registriert: 04.06.2003 Dell Precision 470 Intel Xeon CPU 3,00GHz 2GB Ram Microsoft Windows XP Catia V5 R18 SP6 VB2005
|
erstellt am: 10. Jun. 2011 09:28 <-- editieren / zitieren --> Unities abgeben: Nur für tobiley
Hallo da du mit LateBinding arbeitest kannst du natürlich die Konstanten nicht in dieser Form nutzen, da der Compiler, aufgrund der fehlenden Verweise, diese nicht auflösen kann. Wenn du weiterhin mit LateBinding arbeiten willst, mußt du für die entsprechende Konstante einen Integer-Wert einsetzen (zu finden in der Automation.chm) ------------------ Grüße TStone "Respektiere die Macht der Worte, wähle sie mit Bedacht!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tobiley Mitglied Masterstudent
Beiträge: 59 Registriert: 15.02.2010 Win XP CatiaV5 R17, R18, R19 HD2-Lizenz VB2008
|
erstellt am: 10. Jun. 2011 10:18 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für eure Antworten werde gleich ein Beispiel einstellen. Kannst du mir sagen wo ich in der Automation.chm suchen muss, finde immer nur die "normalen" Konstanten, aber nicht den Integerwert dazu. Vielen Dank schon mal! Grüße Tobi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tobiley Mitglied Masterstudent
Beiträge: 59 Registriert: 15.02.2010 Win XP CatiaV5 R17, R18, R19 HD2-Lizenz VB2008
|
erstellt am: 10. Jun. 2011 10:46 <-- editieren / zitieren --> Unities abgeben:
Soo, ich habs nun gefunden in dem Objectbrowser vom CATIA VBA Editor stehen die Integerwerte hinter der Konstanten und es funktioniert. Vielen Dank nochmal! Und hier das versprochene Beispiel:
Code:
'Benötigte Imports für das Late-BindingImports System.Runtime.InteropServices Imports System.Reflection Sub lb_get(ByVal ob As Object, ByVal Befehl As String, ByVal param As Object()) lb_result = ob.GetType().InvokeMember(Befehl, BindingFlags.GetProperty, Nothing, ob, param) End Sub Sub lb_set(ByVal ob As Object, ByVal Befehl As String, ByVal param As Object()) lb_result = ob.GetType().InvokeMember(Befehl, BindingFlags.SetProperty, Nothing, ob, param) End Sub Sub lb_methode(ByVal ob As Object, ByVal Befehl As String, ByVal param As Object()) lb_result = ob.GetType().InvokeMember(Befehl, BindingFlags.InvokeMethod Or BindingFlags.OptionalParamBinding, Nothing, ob, param) End Sub
'-----Aufruf---------- Dim MyCatiaDocument As Object lb_get(CATIA, "ActiveDocument", Nothing) MyCatiaDocument = lb_result 'entspricht: MyCatiaDocument = CATIA.ActiveDocument lb_set(CATIA, "StatusBar", New Object() {"Testprogramm"}) 'entspricht: CATIA.StatusBar = "Testprogramm" lb_methode(MyProduct, "ApplyWorkMode", New Object() {2}) 'entspricht: MyProduct.ApplyWorkMode(CatWorkModeType.DESIGN_MODE)
(Const DESIGN_MODE = 2) Gruß Tobi
[Diese Nachricht wurde von tobiley am 10. Jun. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
INLU Mitglied Konstrukteur Automotive
Beiträge: 71 Registriert: 01.03.2008
|
erstellt am: 10. Jun. 2011 18:58 <-- editieren / zitieren --> Unities abgeben: Nur für tobiley
Hi tobiley, das werde ich mal bei Gelegenheit so probieren. Ich bin so vorgegangen.
Ich verwende beim Programmanfang nur folgende Zeilen:
Code: Dim CATIA as Object CATIA = System.Runtime.InteropServices.Marshal.GetActiveObject("CATIA.Application")
Damit kann ich alle Objekte unter dem Stamm CATIA finden und verwenden. Einzige ausnahme ist der Fall mit lb_methode. Da gehe ich wie folgt vor: Ich möchte ein Body (aktuell) in einem Part (apart) in Bearbeitung setzen.
Code: apart.[GetType]().InvokeMember("InWorkObject", System.Reflection.BindingFlags.SetProperty, Nothing, apart, New Object() {aktuell})
Ich habe natürlich noch nicht jeden Catia API Befehl so verwendet, aber ein Programm zum Aufbau einer Bodystruktur mit mehreren Körper und booleschen Operationen inklusive CATIA.StartCommand funktioniert Einwand frei. Ich werde aber bei meinen folgenden Projekten Deine Variante auch einmal probieren! mfg Lars
[Diese Nachricht wurde von INLU am 10. Jun. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|