CATIA SystemService.ExecuteScript aus C# aufrufen!

Fehlerbeschreibung:

– Ausnahme ausgelöst: “System.Runtime.InteropServices.SafeArrayTypeMismatchException”
– Das angegebene Array hat nicht den erwarteten Typ.

 

Das liegt mit ziehmlicher Warscheinlichkeit daran, das Ihr zwei unterschiedliche Programmierspachen mit einander kommunizieren lassen wollt.
In meinem Fall, wollte ich eine STRING ARRAY  an CATIA Script übergeben.

Exeption wird geworfen bei folgender Deklaration.

String[] sParam = new String[2];

Möglichkeit

Object[] sParam = new Object[2];

 

Hier die ganze Lösung zu meinem Fall:

Der urspüngliche Weg das ganze über

Process.Start(“c:\\Temp\\CATIA_Name.catScript”)

aufzurufen verbirgt einige Fehlerquellen. Zunächst, kann es sein, das nicht die gewünschte CATIA Version ausgelöst wird.

ABHILFE:

C# Code um ein *.CATScript aufzurufen.

// 1. Erzeuge ein CATIA Object der geöffenten CATIA Applikation
INFITF.Application oCatia_TempPP = Marshal.GetActiveObject("CATIA.Application") as INFITF.Application;

// 2. Du hast die Möglichkeit einen Array an Argumenten zu übergeben. Bitte beachte, das ein String Array in C# sich anders verhält als ein VBA Array.
// Damit du keine Fehler bekommst, solltest du ein Array vom Typ Object erzeugen.
// In Diesem Fall ein mit einem Feld

Object[] sParam = new Object[1];

// initialisiere das erste Feld mit einem beliebiegen Wert.
sParam[0] = "TEST";

// Jetzt rufen wir das CATScript auf.

oCatia_TempPP.SystemService.ExecuteScript("C:\\Temp",INFITF.CatScriptLibraryType.catScriptLibraryTypeDirectory, "MeinCatiaScript.catvbs", "CATMain", sParam);

// FERTIG

// Wenn du direkt auf ein CATIA VBA Code zugreifen möchtest, dann nimm folgenden Code
oCatia_TempPP.SystemService.ExecuteScript("C:\\Temp\\ArbeitsinhaltPruefPP.catvba", INFITF.CatScriptLibraryType.catScriptLibraryTypeVBAProject, "Module1", "CatMain",sParam);

 

 

//———————- MeinCatiaScript.catvbs ——–

' VBScript CODE ----

' Hier wird jetzt der Wert, der zunächst als sParam übergeben wurde, verarbeitet!

Sub CATMain(oParameter1)
Dim myScript
Dim SysServ
Dim Params(0)
Params(0) = oParameter1

msgbox("test... " + oParameter1)

Set SysServ = CATIA.SystemService
myScript = SysServ.ExecuteScript("C:\Temp\MeinVBACode.catvba", catScriptLibraryTypeVBAProject, "Module1", "CATMain", Params)

End Sub

 

 

 

 

Weiteres:

Möchtest du weitere Parameter übergeben, kannst du das in deinem String – Array tun. Bitte beachte aber, das jedes Feld explizit als Übergabeparameter angegeben werden muss.

 

Beispiel:

‘ Nur ein ArrayFeld

Sub CATMain(oParameter1)

‘ Zwei ArrayFelder

Sub CATMain(oParameter1, oParameter2)

‘Drei ArrayFelder

Sub CATMain(oParameter1, oParameter2, oParameter3)