Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  System.NullReferenceException beim Aufruf von AskIdSymbolInfo - NX4 VB .NET

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:  System.NullReferenceException beim Aufruf von AskIdSymbolInfo - NX4 VB .NET (1600 mal gelesen)
MarckyMON
Mitglied
Programmierer


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

Beiträge: 35
Registriert: 07.07.2008

erstellt am: 06. Dez. 2010 22:01    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 Zusammen,

ich versuche die Anzahl von runden ID-Symbolen zu ermittlen. Die werden nur aufgezählt, wenn der Text des Symbols mit einem Wert übereinstimmt:

Code:

Dim idSymbolType As UFDrf.IdSymbolType
Dim idSymbolOrigin() As Double = {0.0, 0.0, 0.0}
Dim idSymbolInfo() As UFDrf.IdSymbolInfo

ufSession.Drf.AskIdSymbolInfo(idSymbolTag, idSymbolType, idSymbolOrigin, idSymbolInfo)


Der folgende Fehler wird im Syslog gezeigt:
System.NullReferenceException: Object reference not set to an instance of an object.
  at NXOpen.UF.UFDrf.AskIdSymbolInfo(Tag id_symbol_tag, IdSymbolType& id_symbol_type, Double[] id_symbol_origin, IdSymbolInfo[]& id_symbol_info)

  at TDF_MIKRON_change_table.ChangeTable.CountIDSymbols(Part workPart, String idText) in D:\My Documents\VS Projects\Mikron\TDF_MIKRON_change_table\ChangeTable.vb:line 196
  at TDF_MIKRON_change_table.EntryPoint.Main() in D:\My Documents\VS Projects\Mikron\TDF_MIKRON_change_table\EntryPoint.vb:line 25
*** EXCEPTION: Error code  67 in line 996 of O:\ugnx404\ip2\src\syss\no\ind\lmldr.c at Mon Dec 06 21:49:54 2010 W. Europe Standard Time
+++ Object reference not set to an instance of an object.

Wie muss ich idSymbolInfo deklarieren, damit die Funktion erfolgreich aufruft (wenn das das tatsächliche Problem ist)?? 

Danke Euch!!

------------------
Gruß,
char *name = "Marc";

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

gfx-toxic.de
Moderator
Konstruktion / Anwenderbetreuung


Sehen Sie sich das Profil von gfx-toxic.de an!   Senden Sie eine Private Message an matthias-p  Schreiben Sie einen Gästebucheintrag für matthias-p

Beiträge: 501
Registriert: 09.06.2006

Teamcenter 11.3 / NX 11
Windows 10

erstellt am: 07. Dez. 2010 07:53    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 MarckyMON 10 Unities + Antwort hilfreich

Hi,

es gibt ein Array in deinem Workpart das alle ID Symbole enthält
"workpart.Annotations.IdSymbols"
Da kannst du zum einen die Eigenschaft .Length auswerten dann hast du schon mal die Anzahl alle ID Symbole.

Wenn du jetzt nur die Runden willst, kannst du ja das Array mit foreach durchlaufen und nach der Eigenschaft filtern...

                           

Code:
foreach (NXOpen.Annotations.IdSymbol symbole in workpart.Annotations.IdSymbols)
                            {
                                NXOpen.Annotations.IdSymbol sym = (NXOpen.Annotations.IdSymbol)workpart.FindObject(symbole.JournalIdentifier.ToString());
                                NXOpen.Annotations.IdSymbolBuilder builder = workpart.Annotations.IdSymbols.CreateIdSymbolBuilder(sym);

if(builder...(Hier die Abfrage über die Eigenschaft)

                            }


So sollte das ganze einfach gehen.

------------------
Gruß Matthias
------------------------------------
ICQ: 163190295

[Diese Nachricht wurde von gfx-toxic.de am 07. Dez. 2010 editiert.]

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

MarckyMON
Mitglied
Programmierer


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

Beiträge: 35
Registriert: 07.07.2008

erstellt am: 07. Dez. 2010 10:21    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

Hi Matthias,

Super! Ich habe nämlich in der falschen Stelle gesucht, nämlich in workPart.Drafting und nicht under .Annotations.

Ich werde im laufen des Tages deinen Code ausprobieren, danke!

------------------
Gruß,
char *name = "Marc";

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

MarckyMON
Mitglied
Programmierer


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

Beiträge: 35
Registriert: 07.07.2008

erstellt am: 07. Dez. 2010 19:09    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

Für die NX4 NX/Open API gibt es keine IdSymbol bzw. Annotations.IdSymbols Objekte.

Das heißt ich musste zurück auf die UG/Open Wrapper-Funktionen zurückgreifen: was ist bei meinem ursprünglichen Code falsch??

------------------
Gruß,
char *name = "Marc";

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: 08. Dez. 2010 10:08    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 MarckyMON 10 Unities + Antwort hilfreich

Hallo Marc,

mindestens einer der vier Parameter in AskIdSymbolInfo hat keinen Wert, ist also nicht instanziert.

Es wäre demzufolge:

a) herauszufinden, welcher Parameter es ist
b) eine Instanz anzulegen

Erstes dürfte nicht allzu schwierig sein, Variable in der IDE überwachen oder eine Kontrollausgabe machen.

Der Konstruktor einer Klasse wird i.d.R. über das Schlüsselwort NEW aufgerufen. In der NXOpen API gibt's aber auch andere Wege (Classname.create) , da hilft dann die Doku weiter.

Gruß, Michael

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



Konstrukteur (m/w/d) Maschinenbau
Die besten Köpfe für die unterschiedlichsten Aufgaben zu finden sowie Menschen und Technologien zu verbinden, und zwar täglich aufs Neue - dafür schätzen unsere Kunden FERCHAU. Unterstütze uns: als ambitionierte:r Kolleg:in, der:die wie wir Technologien auf die nächste Stufe bringen möchte. Wir realisieren spannende Projekte für namhafte Kunden des Maschinenbaus und arbeiten mit an anspruchsvollen Lösungen für die Industrie....
Anzeige ansehenMaschinenbau
MarckyMON
Mitglied
Programmierer


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

Beiträge: 35
Registriert: 07.07.2008

erstellt am: 09. Dez. 2010 21:48    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

Hier gibt es keine Klassen, nur Strukturen und Enums.

In Theorie soll das idSymbolInfo Array von der Funktion ausgefüllt werden. NX4 bietet NXOpen.Annotations.IdSymbol(s) nicht an  

Ich habe auch keinen anderen Weg gefunden, wie ich mein Zeil erreichen soll.

Hier die Funktion; diese ist in einer Klasse "ChangeTable" definiert:

Code:

    Public Shared Function CountIDSymbols(ByVal workPart As Part, ByVal idText As String) As Integer
        CountIDSymbols = 0

        Dim idSymbolTag As Tag = Tag.Null
        Dim objType, objSubtype As Integer

        Do
            nxUFSession.Obj.CycleObjsInPart(workPart.Tag, UFConstants.UF_drafting_entity_type, idSymbolTag)

            If Not idSymbolTag.Equals(Tag.Null) Then
                nxUFSession.Obj.AskTypeAndSubtype(idSymbolTag, objType, objSubtype)

                If objSubtype.Equals(UFConstants.UF_draft_id_symbol_subtype) Then
                    Dim idSymbolType As UFDrf.IdSymbolType
                    Dim idSymbolOrigin() As Double = {0.0, 0.0, 0.0}
                    Dim idSymbolInfo() As UFDrf.IdSymbolInfo

                    nxUFSession.Drf.AskIdSymbolInfo(idSymbolTag, idSymbolType, idSymbolOrigin, idSymbolInfo)

                End If

            End If

        Loop Until idSymbolTag.Equals(Tag.Null)
    End Function


nxUFSession wird im Hauptmodul deklariert:

Code:

Public Module EntryPoint

    Public dbg As Logger
    Public nxSession As Session = Session.GetSession()
    Public nxUFSession As UFSession = UFSession.GetUFSession()

    Public Sub Main()
        ...
    End Sub

End Module


EDIT: Die Meldung System.NullReferenceException: Object reference not set to an instance of an object. existiert nicht mehr nachdem ich die MP10 für NX 4.0.4.2 eingespielt habe. Das Problem ist allerdings noch nicht gelöst - ich bekomme jetzt die folgende Fehlermeldung:

Caught exception while running: Main
System.ArgumentException: Type _LeaderInfo can not be marshaled as an unmanaged structure; no meaningful size or offset can be computed.

  at System.Runtime.InteropServices.Marshal.SizeOf(Type t)

  at NXOpen.UF.UFDrf.AskIdSymbolInfo(Tag id_symbol_tag, IdSymbolType& id_symbol_type, Double[] id_symbol_origin, IdSymbolInfo[]& id_symbol_info)

  at TDF_MIKRON_change_table.ChangeTable.CountIDSymbols(Part workPart, String idText)

  at TDF_MIKRON_change_table.EntryPoint.Main()
*** EXCEPTION: Error code  67 in line 996 of F:\workdir\reference\NX404_2\src\syss\no\ind\lmldr.c at Fri Dec 10 00:55:05 2010 W. Europe Standard Time
+++ Type _LeaderInfo can not be marshaled as an unmanaged structure; no meaningful size or offset can be computed.

------------------
Gruß,
char *name = "Marc";

[Diese Nachricht wurde von MarckyMON am 10. Dez. 2010 editiert.]

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