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)