Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  eigene DLL-Funktionen mit .NET aufrufen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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



Sehen Sie sich das Profil von tobias.t an!   Senden Sie eine Private Message an tobias.t  Schreiben Sie einen Gästebucheintrag für tobias.t

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Overcast an!   Senden Sie eine Private Message an Overcast  Schreiben Sie einen Gästebucheintrag für Overcast

Beiträge: 111
Registriert: 21.12.2005

.

erstellt am: 04. Dez. 2008 12:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für tobias.t 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von tobias.t an!   Senden Sie eine Private Message an tobias.t  Schreiben Sie einen Gästebucheintrag für tobias.t

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Overcast an!   Senden Sie eine Private Message an Overcast  Schreiben Sie einen Gästebucheintrag für Overcast

Beiträge: 111
Registriert: 21.12.2005

.

erstellt am: 04. Dez. 2008 13:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für tobias.t 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von tobias.t an!   Senden Sie eine Private Message an tobias.t  Schreiben Sie einen Gästebucheintrag für tobias.t

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Overcast an!   Senden Sie eine Private Message an Overcast  Schreiben Sie einen Gästebucheintrag für Overcast

Beiträge: 111
Registriert: 21.12.2005

.

erstellt am: 04. Dez. 2008 14:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für tobias.t 10 Unities + Antwort hilfreich

Evtl. wäre die Microsoft C++ COM API ein Weg, aber helfen kann ich hierbei leider nicht 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



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 ansehenAutomatisierungstechnik
HappyJohn.Stephen
Mitglied



Sehen Sie sich das Profil von HappyJohn.Stephen an!   Senden Sie eine Private Message an HappyJohn.Stephen  Schreiben Sie einen Gästebucheintrag für HappyJohn.Stephen

Beiträge: 24
Registriert: 01.03.2009

erstellt am: 01. Mrz. 2009 10:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für tobias.t 10 Unities + Antwort hilfreich

Können wir ein Makro in Remote-Modus? Wenn ja, wie?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz