Guten Tag,
ich habe folgendes Anliegen:
Ich habe mir vor einiger Zeit das Buch für CatiaV5 von Jens Hansen gekauft in dem auch die Einbundung von Catia in Vb.Net per LateBindung(reflection) gezeigt wird.
Nun läuft das sehr viel stabilder und schneller als der umweg über die Bibliotheken, jedoch fidne ich die schreibweise sehr umständlich. Ich habe mir bereits weitere Hilfsfunktionen geschrieben um mehrer Befehle hintereinander abzuarbeiten.
Zur erläuterung:
part = ch.GetProperty(new String() {"ActiveDocument","Part"}) zugrundeliegender (Teil-)Code wäre folgender:
Imports System.Reflection
imports System.Runtime.InteropServices
Public Class CatiaHandler
Private _catia As Object
Private _invokeAttr As BindingFlags
Public Sub New()
_catia = GetInstance()
End Sub
' Überladungen von GetProperty
Public Function GetInstance() as Object
return Marshal.GetActiveObject("CATIA.Application")
End Function
Public Function GetProperty(ob As Object, Befehl As String, args As Object()) _
as Object
_invokeattr = bindingflags.GetProperty
return InvokeMember(Befehl, _invokeAttr, ob, args)
End Function
Public Function GetProperty(ob As Object, Befehl As String) As Object
return GetProperty(ob, Befehl, nothing)
End Function
Public Function GetProperty(ob As Object, Befehl As String()) As Object
Dim o as Object = GetProperty(ob, Befehl(0))
If Befehl.GetUpperBound(0) = 0 Then
Return o'GetProperty(ob, Befehl(0))
Else
Dim s1 As String() = new String(befehl.GetUpperBound(0) -1) {}
array.Copy(Befehl,1,s1,0,befehl.GetUpperBound(0))
Return GetProperty(o, s1)
End If
End Function
Public Function GetProperty(Befehl As String) As Object
return GetProperty(_catia, Befehl)
End Function
Public Function GetProperty(Befehl As String()) As Object
return GetProperty(_catia, Befehl)
End Function
Private Function InvokeMember(name As String, invokeAttr As BindingFlags, _
target As Object, args As Object()) As Object
return target.[GetType]().InvokeMember(name, invokeAttr, Nothing, target, _
args)
End Function
End Class Anstatt jeweils einzeln auf ActiveDocument und von daus auf Part zuzugreifen.
Nun meine eigentliche Frage.
Ist es möglich dies "normal" schreiben zu können. Also Part = CH.ActiveDocument.Part und man das so dreht das er inten oben gelistetes ausführt.
Functionen würden daran erkannt werden, das abschließende () da wären.
Die Bibliotheken hätten nur den vorteil der automatischen Codevervollständigung, die ich jedoch nicht benötigen würde. Nur die vereinfachte schreibweise wäre schön, OHNE das komplette Klassenmodell nachzubauen!
Vll ist hier ja ein sehr guter VB.net Programmierer, der jetzt mit Attributen oder so um die ecke kommt.
Leider hat mich das Internet und mein Buch bislang im dunklen gelassen , welche möglichkeiten da vorhanden sind (Reflektion allgemein wird nur sehr wenig behandelt finde ich...)!
Vielen Dank im Voraus. |