Hallo alle miteinander,
ich will mit einem Journal (C#) eine DLL aufrufen, wobei ich mehrere Parameter übergeben will. Es gibt ja schon eine Menge Beiträge zu diesem Thema:
- Aufruf von DLL aus Journal
- dll nun aus vb.net ausführbar?
- Eine dll aus einem .net Programm aufrufen
- Parameter an DLL übergeben
Leider ist es mir nicht gelungen dies umzusetzen. Das folgende Minimalbeispiel zeigt 2 Wege auf (einmal mit theSession.Execute und einmal über Assembly) die DLL aufzurufen, aber sobald der Übergabeparameter von "null" abweicht, kommen Fehlermeldungen wie:
a) NXOpen.NXException: Exception while invoking method in managed code: ... Zeile des Execute-Aufrufes
b) System.ArugmentException: Das Objekt mit dem Typ "System.String" kann nicht in den Typ "String.String[]" konvertiert werden ... Zeile des GetMethod-Aufrufes
DLL:
Code:
using System;
using NXOpen;namespace MyProject {
public class MyClass {
public static void Main(string[] args) {
Session theSession = Session.GetSession();
Part workPart = theSession.Parts.Work;
Part displayPart = theSession.Parts.Display;
UI theUI = UI.GetUI();
theUI.NXMessageBox.Show("title", NXMessageBox.DialogType.Warning, "Hello World!");
}
}
}
1. Weg mit Execute:
Code:
using System;
using NXOpen;namespace startDllByExecute {
public class NXJournal {
public static void Main(string[] args) {
string path = "C:\\home\\NXExperiments\\startDllFromCsJournal\\MyProject\\bin\\Debug\\MyProject.dll";
Session theSession = Session.GetSession();
Object[] nada = new Object[1];
nada[0] = null;
theSession.Execute(path, "MyClass", "Main", nada);
}
}
}
2. Weg mit Assembly:
Code:
using System;
using System.Reflection;
using System.IO;
using NXOpen;namespace startDllByAssembly {
public class NXJournal {
public static void Main(string[] args) {
string path = "C:\\home\\NXExperiments\\startDllFromCsJournal\\MyProject\\bin\\Debug\\MyProject.dll";
Assembly ass = Assembly.LoadFrom(path);
Type ty = ass.GetType("MyProject.MyClass");
Object[] p = { null };
ty.GetMethod("Main").Invoke(null, p);
}
}
}
Wie gesagt, sobald ich den Übergabe anfasse, z.B. einen String einsetze, ihn zu einem Object[] konvertiere oder die Länge ändere, geht es nicht mehr. Langsam komm ich mir schon ein bisschen blöde vor, als könnte ich nicht mal eine einfache Konvertierung...
Ach ja, verwendete Software und co:
- Windows 7 Pro
- MS 2012 Pre (.NET Framework 2.0)
- NX 7.5
Danke schon im Voraus für die Hilfe und Tipps.
Gruß Frank
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP