| | |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX | | | |  | Anwender CAD mit Siemens NX-Basis , ein Kurs (bis zu 100% förderbar mit Bildungsgutschein)
|
|
Autor
|
Thema: Wrapper-Funktion für UF_ATTR_read_value (1021 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 |

| | Elektroingenieur (m/w/d) | | Starte noch heute deine Engineering-Karriere bei FERCHAU und entwickle die Innovationen von morgen. Wir suchen dich: als ambitionierte:n Kolleg:in, der:die wie wir Technologien auf die nächste Stufe bringen möchte. Wir realisieren spannende Projekte für namhafte Kunden in allen Technologiebereichen und für alle Branchen und übernehmen Verantwortung für komplexe Entwicklungsprojekte. Ob als Berufseinsteiger:in ... | | Anzeige ansehen | Berufseinstieg/Trainee |
|
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 >>)
 |