| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: Wrapper-Funktion für UF_ATTR_read_value (716 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 |
| Maschinenbauingenieur / Konstruktionsingenieur (w/m/d) Gas- und Energiewirtschaft | Die PSE Engineering GmbH bietet im Bereich Planung alle Ingenieurdienstleistungen rund um die betriebstechnischen Einrichtungen in der Energie- und Gaswirtschaft an. Für die unterschiedlichsten Anforderungen unserer Kunden werden die erforderlichen technischen Konzepte und Lösungen individuell erarbeitet und die komplette Planung von der ersten konzeptionellen Vorstudie bis hin zur Bauüberwachung und Inbetriebnahme der kompletten Betriebsanlagen durchgeführt.... | Anzeige ansehen | Maschinenbau |
|
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 >>)
|