| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: Eine dll aus einem .net Programm aufrufen (1805 mal gelesen)
|
little_ug Mitglied CAX/PDM Admin / PM
Beiträge: 389 Registriert: 20.03.2003 NX 7.5.4.4 mp1 Creo2 M020 TC UA 9.1.1.2
|
erstellt am: 14. Dez. 2009 13:18 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe ein .net Programm und will daraus eine andere dll aufrufen. Habe dies gefunden: Public Function Execute ( _ libName As String, _ className As String, _ methodName As String, _ inputArgs As Object() _ ) As Object Also über sess.Execute(....) Nun verzweifle ich ein bisschen daran. Hat jemand ein Beispiel? Danke. ------------------ Gruß Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jan Boettcher Mitglied
Beiträge: 184 Registriert: 22.06.2005
|
erstellt am: 14. Dez. 2009 13:49 <-- editieren / zitieren --> Unities abgeben: Nur für little_ug
Hallo Michael, Willst Du eine Funktion aus einer .NET dll ausführen? Dann funktioniert bei mir das folgende ganz hervorragend:
Code:
Assembly applicationLibAssy = Assembly.LoadFrom("<Pfad u. Name dll>")); Type mainClass = applicationLibAssy.GetType("<Namespace u. Klassenname>"); mainClass.GetMethod("<Methodenname>").Invoke(null, new Object[] { <Argumente> });
(Sorry für's C#) Gruß Jan
------------------ Ingenieurbüro Jan Böttcher www.ib-boettcher.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
little_ug Mitglied CAX/PDM Admin / PM
Beiträge: 389 Registriert: 20.03.2003 NX 7.5.4.4 mp1 Creo2 M020 TC UA 9.1.1.2
|
erstellt am: 15. Dez. 2009 11:01 <-- editieren / zitieren --> Unities abgeben:
Hi habe jetzt folgendes probiert Dim dll As String = kr_konfig_dir & "\api\vb_dot_net\Einzelteilnummer.dll" Dim dummyobj(0) As Object dummyobj(0) = "1" Try sess.Execute(dll, "baseform", "", dummyobj) Catch ex As Exception lw.Open() lw.WriteLine(ex.Message) End Try Das dummyobj ist weil ich keine iputArgs habe. Aber ohne geht es scheinbar nicht.
Jetzt bekomme ich folgende Exeption: Exception while invoking method in managed code Ideen? - Danke :-) ------------------ Gruß Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hornauer Mitglied
Beiträge: 41 Registriert: 26.01.2001
|
erstellt am: 15. Dez. 2009 20:53 <-- editieren / zitieren --> Unities abgeben: Nur für little_ug
Hallo little_ug, mit ner *.exe funktioniert das Beispiel. Vielleicht ja auch mit ner *.dll . Habs nicht probiert. "Learning by Doing" ist angesagt. ############################################################################### Try 'declare filename for Process() convertcmd.StartInfo.FileName = "*.exe" 'declare arguments for Process() 'convertcmd.StartInfo.Arguments = <MyArguments> 'declare windowstyles for Process() convertcmd.StartInfo.WindowStyle = ProcessWindowStyle.Normal 'start Process() convertcmd.Start() 'if error occurs, check for reasons... Catch e As Win32Exception '...if executable file is not found... If e.NativeErrorCode = ERROR_FILE_NOT_FOUND Then '...throw error-messagebox System.Windows.Forms.MessageBox.Show((e.Message + ". Check the path.")) Else '...permissions to execute the translator... If e.NativeErrorCode = ERROR_ACCESS_DENIED Then '...throw error-messagebox System.Windows.Forms.MessageBox.Show((e.Message + ". You do not have permission to save the destination file.")) End If End If End Try 'wait for exit of Process() convertcmd.WaitForExit() 'theSession.Parts.Work.Close(False, Part.CloseModified.CloseModified, Nothing) ############################################################################### Gruß Rolf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
little_ug Mitglied CAX/PDM Admin / PM
Beiträge: 389 Registriert: 20.03.2003 NX 7.5.4.4 mp1 Creo2 M020 TC UA 9.1.1.2
|
erstellt am: 16. Dez. 2009 08:41 <-- editieren / zitieren --> Unities abgeben:
|
| Senior Konstrukteur für Industriestahlbau (m/w/x) | Als führendes Familienunternehmen in der Luft- und Umwelttechnik ist reine Luft für nachfolgende Generationen unsere Passion. Wir bieten vielfältige Möglichkeiten in einer internationalen, zukunftsträchtigen Branche für alle, die unsere Leidenschaft für Umweltschutz und Technologie teilen. Denn wir arbeiten für eine Zukunft, die sich lohnt. Nicht nur für die Umwelt, sondern auch für dich.
| Anzeige ansehen | Feste Anstellung |
|
mseufert Moderator Freiberuflicher CAD/CAM Ingenieur
Beiträge: 2700 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-2306 3D Printer Prusa MK2 S
|
erstellt am: 16. Dez. 2009 08:55 <-- editieren / zitieren --> Unities abgeben: Nur für little_ug
Hallo Michael, der dritte Parameter bei Session.execute() darf nicht leer sein. Da muß der Name einer Methode (Function oder Sub) drin stehen, die ausgeführt werden soll. Daneben könnte es auch bei den Argumenten Probleme geben, wenn Typ und Anzahl nicht zur aufgerufenen Methode passen. Der einfachste Weg ist jedoch, die dll zu referenzieren, genau so, wie es mit den NX- dll's geschieht. Referenz eintragen und über den Root- Namespace Klasse, Methode und gegebenenfalls die Argumente angeben, z.B. Dim res As Rückgabetypderfunktion = root_namespace.class_name.function_name(arguments) Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |