| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX | | |  | Solid Edge: Erste Schritte, ein Webinar am 26.09.2025
|
Autor
|
Thema: Wrapper-Funktion für UF_ATTR_read_value (964 mal gelesen)
|
MarckyMON Mitglied Programmierer

 Beiträge: 35 Registriert: 07.07.2008
|
erstellt am: 21. Apr. 2009 11:05 <-- editieren / zitieren --> Unities abgeben:         
Hallo  , Ich bin ziemlich neu zu C und versuche eine Wrapper-Funktion für die UF-Funktion UF_ATTR_read_value zu erstellen. Meine Funktion sieht aus wie folgt:
Code:
extern int TDF_ATTR_read_string ( tag_t attrTag, /* IN */ char *title, /* IN */ char **value /* OUT */ ) { UF_ATTR_value_t attr; int len; int ec; ec = UF_ATTR_read_value(attrTag, title, UF_ATTR_string, &attr); if (attr.type == UF_ATTR_string) { len = (int)strlen(attr.value.string); (*value) = (char *)malloc((len + 1) * sizeof(char)); sprintf(*value, attr.value.string); } return(ec); }
Ich rufe die Funktion aus wie z.B.: Code:
char *value = NULL; tag_t partTag = NULL_TAG; partTag = UF_ASSEM_ask_work_part();
//Überprüfen, ob partTag == NULL_TAG ist... TDF_ATTR_read_string(partTag, "AAA_REVISION", &value); //Weitermachen...
Allerdings habe ich das Problem, daß NX4 abstürzt, oder halt value == NULL ist, obwohl das Part-Attribute AAA_REVISION existiert.
Verpass ich etwas?? Früher hat es funktioniert, weiss nicht aber wieso. Ich bitte dringend um Eure Hilfe, danke!!! EDIT: Ich habs - ich muss die Stuktur attr zuerst initalizieren, damit UF_ATTR_read_value überhaupt läfut (sonst wird ein Error-Code mit Wert 11 zurückgeliefert). Was mich natürlich ärgert, ist es nirgendwo in der Open C API-Doku geschrieben ist, daß ich die Struktur intializieren muss...  Hier die neue Funktion:
Code:
extern int TDF_ATTR_read_string ( tag_t attrTag, /* IN */ char *title, /* IN */ char **value /* OUT */ ) { UF_ATTR_value_t attr; int ec, len; attr.value.string = NULL; ec = UF_ATTR_read_value(attrTag, title, UF_ATTR_string, &attr); if (ec == 0) { if (attr.type == UF_ATTR_string) { //sprintf(value, attr.value.string); len = (int)strlen(attr.value.string); (*value) = (char *)malloc((len + 1) * sizeof(char)); sprintf(*value, attr.value.string); } //else //sprintf(value, "\0"); } //else //sprintf(value, "\0"); return(ec); }
------------------ Gruß, char *name = "Marc"; [Diese Nachricht wurde von MarckyMON am 21. Apr. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| Planer*in für Ladeinfrastruktur | Den gesamten Energieverbrauch erneuerbar zu produzieren, ist für uns mehr als ein Ziel. Es ist unsere Verantwortung. Mit Strom aus Wind und Sonne, mit grünem Wasserstoff, mit nachhaltiger Wärme, CO2-freier Mobilität sowie smarter Speicherung und Nutzung bauen wir das Energiesystem der Zukunft. Auf Augenhöhe mit Menschen, Gemeinden und Unternehmen stellt GP JOULE als universeller Anbieter die Energieversorgung für Generationen sicher.... | Anzeige ansehen | Feste Anstellung |
|
Overcast Mitglied
 
 Beiträge: 111 Registriert: 21.12.2005 .
|
erstellt am: 20. Mai. 2009 16:07 <-- editieren / zitieren --> Unities abgeben:          Nur für MarckyMON
Zitat: Original erstellt von MarckyMON: Was mich natürlich ärgert, ist es nirgendwo in der Open C API-Doku geschrieben ist, daß ich die Struktur intializieren muss... 
Doch, genau das ist explizit beschrieben: Zitat:
UF_ATTR_value_p_t value Input / Output to be freed Typed Attribute Value: If "type" is UF_ATTR_string then "value->value.string" must either be NULL or point to a character buffer of size UF_ATTR_MAX_STRING_LEN + 1. If the value is NULL, then the returned buffer will be allocated, and the user is responsible for freeing it by calling UF_free().
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |