i've created c# bindings libpostal library (link libpostalnet).
i've used cppsharp create bindings. works don't how convert code :
typedef struct libpostal_address_parser_response { size_t num_components; char** components; char** labels; } libpostal_address_parser_response_t;
cppsharp converts code in way :
public sbyte** components { { return (sbyte**)((global::libpostalnet.libpostaladdressparserresponse.__internal*)__instance)->components; } set { ((global::libpostalnet.libpostaladdressparserresponse.__internal*)__instance)->components = (global::system.intptr)value; } } public sbyte** labels { { return (sbyte**)((global::libpostalnet.libpostaladdressparserresponse.__internal*)__instance)->labels; } set { ((global::libpostalnet.libpostaladdressparserresponse.__internal*)__instance)->labels = (global::system.intptr)value; } }
code should return string array of num_components length.
can me solve this?
this bit complex pointer list of pointers of chars, similar array of strings.
you need iterate pointers, retrieve internal pointers , convert strings (i'm assuming can use unmanaged code):
libpostal_address_parser_response response = (retrieve library); list<string> components = new list<string>(); list<string> labels = new list<string>(); //not sure name of num_components haven't added question //check if name correct for(int buc = 0; buc < response.numcomponents; buc++) { sbyte* plabel = response.labels[buc]; sbyte* pcomponent = response.components[buc]; labels.add(marshal.ptrtostringauto((intptr)plabel)); components.add(marshal.ptrtostringauto((intptr)pcomponent)); } //now have components , labels in respective lists ready usage.
Comments
Post a Comment