Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  NXopen dll Vb->C#

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:  NXopen dll Vb->C# (1115 mal gelesen)
DerFräser
Mitglied
Programmierer


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

Beiträge: 113
Registriert: 09.07.2006

erstellt am: 08. Jul. 2020 17:17    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 brauchte mal eine Info zum Übersetzen eines VB-Programms nach C#.
Die Aufgabe ist, eine DLL(Windows-Form) die sich aus dem NX löscht wenn meine Winform geschlossen wird.

Ich habe auf der Seite https://www.eng-tips.com/viewthread.cfm?qid=420827 dies gefunden:

Code:

Module unload_modeless_winform_immediately
    Dim myform As New Form1
    Dim s As Session = Session.GetSession()
    Dim ufs As UFSession = UFSession.GetUFSession()
    Public Sub Main()
        myform.Show()
        Dim checkThread As New Thread(New ThreadStart(AddressOf IsFormDismissed))
        checkThread.Start()
    End Sub
    Public Sub IsFormDismissed()
        Do
            If myform.IsDisposed() = True Then
                UnloadNXLibrary()
            End If
            Thread.Sleep(30000)
        Loop
    End Sub

Ich kenn mich in C# nicht mit Delegates aus, und habe jetzt ein Problem: new ThreadStart(IsFormDismissed)

Code:
    class Test1
    {
        static readonly Session Sess = Session.GetSession();
        static readonly Part Wp = Sess.Parts.Work;
        static readonly UFSession Ufs = UFSession.GetUFSession();
        //private Form1 MyForm = new Form1(); // todo geht nicht

        public static void Main(string[] args)
        {
            Form1 MyForm = new Form1();
            MyForm.Show();
            var checkThread = new Thread(new ThreadStart(IsFormDismissed));
        }                                                ~~~~~~~~~~~~~~~
    }


         

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

mseufert
Moderator
Freiberuflicher CAD/CAM Ingenieur


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

Beiträge: 2624
Registriert: 18.10.2005

HP Z420
WIN7 64 Win 10
UG NX6-1980
3D Printer Prusa MK2 S

erstellt am: 09. Jul. 2020 16:42    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 DerFräser 10 Unities + Antwort hilfreich

Hallo DerFräser,

ein Hund wird wahrscheinlich hier begraben sein:

Zitat:
//private Form1 MyForm = new Form1(); // todo geht nicht

IsFormDismissed will auf die Variable myform zugreifen, was nicht funktionieren kann, wenn sie auskommentiert ist.

Daneben würde ich auf VB den Thread anders instanzieren, z.B.:

Code:
Dim checkThread As New Thread(AddressOf IsFormDismissed)

Versuch's einfach mal, ob das auch bei C# hilft, falls es nicht allein an der fehlenden Variable liegt.

Gruß, Michael

------------------
Ein Mensch wird laut, wenn er was will;
wenn er's erst hat, dann wird er still;
Das "Danke" ist, nach alter Sitte,
Weit selt'ner als das "Bitte, Bitte".

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

DerFräser
Mitglied
Programmierer


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

Beiträge: 113
Registriert: 09.07.2006

erstellt am: 10. Jul. 2020 18:39    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

Ich habe die Lösung gefunden, stimmt nicht so ganz. Ein anderer Programmierer hat den Fehler gesehen.

Also das Ganze ist eine Konsolenanwendung in VS, worin eine Winform erstellt wird. Anschliessend wird in VS(Projekteigenschaften) umgestellt auf Klassenbibliothek.

Im Code wird nach der Darstellung der Form, ein zweiter Thread gestartet, der immer mal wieder prüft ob das Fenster noch läuft; wenn nicht wird die DLL aus NX entladen.

Mein Fehler (Delegate => Methodenzeiger) die Methode war noch nicht eingetippt.

Es geht jetzt eine Winform-Anwendung im Designer erstellen und nach dem Beenden, kann ich den Quellcode sofort ändern. Man kann das Programm auch in laufenden NX-Session debuggen.

Im Debugger kann man sich die laufenden NX-Objekte detaillierter betrachten, echt geil kein Journal-Gefummel mehr nötig.

MfG

[Diese Nachricht wurde von DerFräser am 10. Jul. 2020 editiert.]

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

mseufert
Moderator
Freiberuflicher CAD/CAM Ingenieur


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

Beiträge: 2624
Registriert: 18.10.2005

HP Z420
WIN7 64 Win 10
UG NX6-1980
3D Printer Prusa MK2 S

erstellt am: 11. Jul. 2020 08:44    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 DerFräser 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von DerFräser:
... die Methode war noch nicht eingetippt.

Das Fehlen der Methode ist ja sooo offensichtlich, daß ich es nicht für notwendig erachtet habe, das separat zu erwähnen. Oftmals wird ja hier auch nur partieller Code gepostet ....

Das Auskommentieren der globalen Variable für die Form halte ich dennoch für einen Fehler. Ohne diese Variable wird die Sub nicht funktionieren.

Zitat:
Im Debugger kann man sich die laufenden NX-Objekte detaillierter betrachten, echt geil kein Journal-Gefummel mehr nötig.

Das ist nicht von den Projekt-Einstellungen, sondern vielmehr von der Existenz einer Autoren-Lizenz abhängig.


.. und ganz nebenbei: Wenn die Unloadoption auf Immediately steht, braucht's m.E. keine eigene Routine für's Unload   

Gruß, Michael

------------------
Ein Mensch wird laut, wenn er was will;
wenn er's erst hat, dann wird er still;
Das "Danke" ist, nach alter Sitte,
Weit selt'ner als das "Bitte, Bitte".

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

DerFräser
Mitglied
Programmierer


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

Beiträge: 113
Registriert: 09.07.2006

erstellt am: 13. Jul. 2020 06:45    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:
Original erstellt von mseufert:

Das ist nicht von den Projekt-Einstellungen, sondern vielmehr von der Existenz einer Autoren-Lizenz abhängig.


.. und ganz nebenbei: Wenn die Unloadoption auf Immediately steht, braucht's m.E. keine eigene Routine für's Unload     

Gruß, Michael


Hallo,
klar das Auskommentieren war falsch. Ich habe die jetzt oben die Deklaration gemacht, damit die Methoden auf die Form zugreifen können. Das mit der Unloadmethode weis ich nicht umzusetzen und die Endlosschleife gefällt mir auch noch nicht, aber es läuft schon mal. Mein Code sieht jetzt so aus:

Code:
class StartForm
    {
        static readonly Session Sess = Session.GetSession();
        static readonly Part Wp = Sess.Parts.Work;
        static readonly UFSession Ufs = UFSession.GetUFSession();
        public static Form1 MyForm; //

        public static void Main(string[] args)
        {
            MyForm = new Form1();
            MyForm.Show();
            var checkThread = new Thread(new ThreadStart(IsFormDismissed));
          checkThread.Start(); // Zeile vergessen
        }
        public static void IsFormDismissed()
        {
            do
            {
                if (MyForm.IsDisposed)
                {
                    UnloadNXLibrary();
                }
                Thread.Sleep(20000);
            } while (true);
        }
        public static void UnloadNXLibrary()
        {
            Assembly runningProgram = Assembly.GetExecutingAssembly();
            Ufs.UF.UnloadLibrary(runningProgram.Location);
        }

        public static int GetUnloadOption(string dummy)
        {
            return (int)Session.LibraryUnloadOption.Explicitly;
        }
    }
}



MfG
 

[Diese Nachricht wurde von DerFräser am 15. Jul. 2020 editiert.]

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



Ingenieur (m/w/d) Medizintechnik
Menschen und Technologien zu verbinden, den Perfect Match für unsere Kunden zu gestalten, immer die richtigen Expert:innen für die jeweilige Herausforderung zu finden - das ist unser Anspruch bei FERCHAU und dafür suchen wir dich: als ambitionierte:n Mitarbeitende:n für einen unserer Kunden. Wir realisieren spannende Projekte für namhafte Kunden in allen Technologiebereichen und für alle Branchen und überzeugen täglich mit fundierter Expertise und fachlichem Know-how....
Anzeige ansehenMedizintechnik
mseufert
Moderator
Freiberuflicher CAD/CAM Ingenieur


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

Beiträge: 2624
Registriert: 18.10.2005

HP Z420
WIN7 64 Win 10
UG NX6-1980
3D Printer Prusa MK2 S

erstellt am: 13. Jul. 2020 08:16    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 DerFräser 10 Unities + Antwort hilfreich

Hallo DerFräser,

in VB sieht das so aus:

Code:
Public Shared Function GetUnloadOption(ByVal dummy As String) As Integer
        Return Session.LibraryUnloadOption.Immediately
End Function

Das ist m.W. die eleganteste Methode, um NX mitzuteilen, ob und wann eine Library entladen werden soll.

Über die SuFu finden sich noch mehr Details. Mehr als den Dreizeiler braucht's aber nicht.

Gruß, Michael

------------------
Ein Mensch wird laut, wenn er was will;
wenn er's erst hat, dann wird er still;
Das "Danke" ist, nach alter Sitte,
Weit selt'ner als das "Bitte, Bitte".

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