| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX | | |  | Cyber-Security-Richtlinie NIS-2: Warum der Maschinenbau jetzt handeln muss, ein Webinar am 23.09.2025
|
Autor
|
Thema: Wrapper-Funktion für UF_ATTR_read_value (977 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 |

| |
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 >>)
 |