| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: eigene DLL-Funktionen mit .NET aufrufen (3206 mal gelesen)
|
tobias.t Mitglied
Beiträge: 11 Registriert: 07.05.2007 WinXP SP2 NX 2.0.6.2 NX 5.0.0.25
|
erstellt am: 28. Nov. 2008 10:52 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe mit Open C eine DLL erstellt, die ich in NX 5 bereits in das Menü integriert habe. Wenn ich da drauf drücke, passiert auch das, was soll. Nun würde ich die Start-Funktion ufusr dieser DLL gerne aus einem externen Programm heraus im interaktiven NX starten. Für den generellen Zugriff von extern auf NX ist mir im Moment nur der Remote-Zugriff pern .NET (ich bevorzuge C#) bekannt. Dabei wird ja durch eine .NET-DLL in NX die Session-Variable per HTTP bereitgestellt. Diese wird dann vom externen Programm benutzt, um in NX Befehle auszuführen. Mein Problem ist, dass ich kein Möglichkeit kenne, auf diesem Weg meine ufusr-Funktion aus der ersten DLL aufzurufen. Ist es überhaupt möglich, in NX eigene Funktionen bereits geladener DLLs aufzurufen? In einem anderen Thread über das Laden von DLLs in Journal habe ich gelesen, dass über .NET (hier war es glaube ich VB) generell DLLs geladen werden können, aber wie kann ich das von einem externen Programm aus machen, so dass der Aufruf der DLL-Funktion dann in NX sichtbar ist. Für Hilfe wäre ich sehr dankbar MfG Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Overcast Mitglied
Beiträge: 111 Registriert: 21.12.2005 .
|
erstellt am: 04. Dez. 2008 12:26 <-- editieren / zitieren --> Unities abgeben: Nur für tobias.t
Das Problem hier ist, dass die externe Routine nichts von der offenen NX Session weiss. Meiner Meinung nach bleibt daher nur der Remote/Client Zugriff und der Kommunikation über HTTP, z.B. über .NET Ich poste mal 2 C# Codes, die bei mir in NX5.0.5 funktionieren Server, kompiliert als C#.NET DLL
Code:
using System; using System.IO; using System.Threading; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Http; using System.Runtime.Remoting.Lifetime; using System.Runtime.Remoting.Messaging; using System.Runtime.Serialization.Formatters; using System.Collections; using NXOpen;public class SimpleService { public static void Main() { Thread serverThread = new Thread(new ThreadStart(Run)); serverThread.Start(); } public static void Run() { int port = 1234; Session theSession = Session.GetSession(); LifetimeServices.LeaseTime = System.TimeSpan.FromDays(10000); SoapServerFormatterSinkProvider provider = new SoapServerFormatterSinkProvider(); provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full; IDictionary props = new Hashtable(); props["port"] = port; HttpChannel channel = new HttpChannel(props, null, provider); ChannelServices.RegisterChannel(channel,false); RemotingServices.Marshal(theSession, "Session"); Thread.Sleep(Timeout.Infinite); } }
Client, kompiliert als C#.NET EXE
Code:
using System; using NXOpen;public class remote_client { public static void Main(string[] args) { Session theSession = (Session)Activator.GetObject(typeof(Session), "http://localhost:1234/Session"); Part workPart = theSession.Parts.Work; Part displayPart = theSession.Parts.Display; NXOpen.Features.Feature nullFeatures_Feature = null; NXOpen.Features.BlockFeatureBuilder blockFeatureBuilder1; blockFeatureBuilder1 = workPart.Features.CreateBlockFeatureBuilder(nullFeatures_Feature); Point3d originPoint1 = new Point3d(0.0, 0.0, 0.0); blockFeatureBuilder1.SetOriginAndLengths(originPoint1, "100", "100", "100"); Body nullBody = null; blockFeatureBuilder1.SetBooleanOperationAndTarget(NXOpen.Features.Feature.BooleanType.Create, nullBody); NXOpen.Features.Feature feature1; feature1 = blockFeatureBuilder1.CommitFeature(); blockFeatureBuilder1.Destroy(); } }
Cheers. [Diese Nachricht wurde von Overcast am 10. Dez. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tobias.t Mitglied
Beiträge: 11 Registriert: 07.05.2007 WinXP SP2 NX 2.0.6.2 NX 5.0.0.25
|
erstellt am: 04. Dez. 2008 12:49 <-- editieren / zitieren --> Unities abgeben:
Hallo Overcast, die zwei Programme, die du hier aufführst, beschreiben die Möglichkeit des Remote-Zugriffs per .NET. Diese Möglichkeit kannte ich bereits. Das eigentliche Problem, was ich lösen möchte / muss, ist, dass ich über diese Verbindung eine Funktion im offenen NX starten möchte, die dort von einer in Open C geschriebenen DLL bereitgestellt wird. Hast du da noch weitere Hinweise? MfG Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Overcast Mitglied
Beiträge: 111 Registriert: 21.12.2005 .
|
erstellt am: 04. Dez. 2008 13:49 <-- editieren / zitieren --> Unities abgeben: Nur für tobias.t
Ich denke nicht, dass man Zugriff auf eine andere in NX geladene DLL hat. Die Session Klasse hat eine Methode Execute(...), aber lt. Doku wird hiermit keine C API DLL unterstützt: Zitat:
Currently supported library types include a Java jar or class file, or a Common Language Runtime (.NET) dll.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tobias.t Mitglied
Beiträge: 11 Registriert: 07.05.2007 WinXP SP2 NX 2.0.6.2 NX 5.0.0.25
|
erstellt am: 04. Dez. 2008 14:13 <-- editieren / zitieren --> Unities abgeben:
Zitat: Ich denke nicht, dass man Zugriff auf eine andere in NX geladene DLL hat.
Ich fürchte langsam, dass du damit Recht hast. Vielleicht kommt das ja in einer zukünftigen NX-Version. Aber vermutlich wird da dann immer mehr nur auf .NET gesetzt. Wenn's überhaupt nicht gehen soll, werde ich wohl oder übel, alle Funktionen meiner C-DLL nach .NET portieren müssen, und daraus dann eine neue DLL basteln. Wäre aber schön gewesen, diesen Schritt zu vermeiden. MfG Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Overcast Mitglied
Beiträge: 111 Registriert: 21.12.2005 .
|
erstellt am: 04. Dez. 2008 14:46 <-- editieren / zitieren --> Unities abgeben: Nur für tobias.t
|
| Ingenieur / Fachplaner Gebäudeautomation / MSR Technik (m/w/d) | Als eines der führenden Ingenieurbüros für Versorgungstechnik in Deutschland mit 110 Mitarbeitern an unseren Standorten in Berlin, Frankfurt a.M., Hamburg und Hüfingen sind wir Spezialisten für die Planung, Beratung und Bauleitung für die Versorgungstechnik von Gebäuden mit Fokus auf Innovation, Wirtschaftlichkeit und Nachhaltigkeit. Unser Planungsteam wächst mit seinen Aufgaben. Für unseren ... | Anzeige ansehen | Automatisierungstechnik |
|
HappyJohn.Stephen Mitglied
Beiträge: 24 Registriert: 01.03.2009
|
erstellt am: 01. Mrz. 2009 10:28 <-- editieren / zitieren --> Unities abgeben: Nur für tobias.t
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|