| | |  | 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 (1034 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 |

| | Technischer Mitarbeiter (m/w/d) Arbeitsvorbereitung | Sie suchen eine spannende und vielseitige Tätigkeit, die etwas bewirkt und ein sicheres Arbeitsverhältnis mit langfristigen Perspektiven? Dann sind Sie bei uns richtig! Setzen Sie Ihre Stärken und Ihre Erfahrung in einem nachhaltigen und innovativen Unternehmen ein und tragen Sie zum Schutz der lebensnotwendigen Ressource Wasser bei! Zur Verstärkung unseres Teams in Roßdorf bei Darmstadt suchen wir eine/n technischen Mitarbeiter (m/w/d) in der Arbeitsvorbereitung.... | | 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 >>)
 |