Based on a quick look at the documentation, my guess would be [CCode (cname = "ngGet_Vec_Info")] public static unowned VectorInfo? get_vector_info (string name); That said, if you put it in the VectorInfo class you might want to consider changing the name to "from_string" or something. VectorInfo.get_vector_info is a bit repetitive for my taste. -Evan On Tue, 2014-06-24 at 17:48 +0200, Steven Vanden Branden wrote:
thanks a lot, it working afther some tweaking and testing. but i got another question: i would like to get the vector info struct working with this function: VAPI: [CCode (cname = "ngGet_Vec_Info")] public unowned VectorInfo get_vector_info(string vector_name); HEADER: pvector_info ngGet_Vec_Info(char* vecname); VAPI: [CCode (cname = "vector_info", has_destroy_function = false, has_copy_function = false, has_type_id = false)] public struct VectorInfo { [CCode (cname = "v_name")] public unowned string name; [CCode (cname = "v_type")] public int type; [CCode (cname = "v_flags")] public short flags; [CCode (cname = "v_realdata",array_length = false)] public double[] data; [CCode (cname = "v_compdata",array_length = false)] public NgComplex data_complex; [CCode (cname = "v_length")] public int length; } HEADER: typedef struct vector_info { char *v_name; int v_type; short v_flags; double *v_realdata; ngcomplex_t *v_compdata; int v_length; } vector_info, *pvector_info; HEADER: but it gives my an errors on the number of parameters that is not correct. It seems i need to connect to v_length parameter to the data, because this is a vector of that length. Any clues how to fix this or where to find info? Evan Nemerson schreef op Tue 20-05-2014 om 12:43 [-0700]:On Tue, 2014-05-20 at 19:55 +0200, Steven Vanden Branden wrote:hello, seems like the mail got lost but anyway have read the answer on mailarchive about the bool, got the vapi to compile but get an segment fault error when i try to run the application so i would like to review the vapi for the function that causes it: #if __GNUC__ >= 4 #define IMPEXP __attribute__ ((visibility ("default"))) #define IMPEXPLOCAL __attribute__ ((visibility ("hidden"))) IMPEXP int ngSpice_Init(SendChar* printfcn, SendStat* statfcn, ControlledExit* ngexit, SendData* sdata, SendInitData* sinitdata, BGThreadRunning* bgtrun, void* userData); the arguments are almost all pointer to callback functions and these i need to get in my vala program. vapi code :[CCode (cname = "ngSpice_Init")] public int init(out SendOutput* a,out SendSimulationStatus* b,out ControlledExit* c , out SendVectorData* d, out SendInitializationData* e, out IsBackgroundThreadRunning* f, out void * userData);Do not use pointers in Vala. They are there for some corner cases which will not work any other way, but in general if you are using pointers in Vala you are doing it wrong. I don't know why you think these are out parameters—based on a quick look at the documentation they seem like in parameters. It's untested, but you should try something along the lines of: [CCode (cname = "SendChar", has_target = false, simple_generics = true)] public delegate int SendChar<T> (string str, int id, T data); [CCode (cname = "SendStat", has_target = false, simple_generics = true)] public delegate int SendStat<T> (string str, int id, T data); [CCode (cname = "ControlledExit", has_target = false, simple_generics = true)] public delegate int ControlledExit<T> (int status, bool immediate, bool quit, int id, T data); [CCode (cname = "SendData", has_target = false, simple_generics = true)] public delegate int SendData<T> (VecValuesAll[] vectors, int id, T data); [CCode (cname = "SendInitData", has_target = false, simple_generics = true)] public delegate int SendInitData<T> ([CCode (array_length = false)] VecInfoAll[] vecs, int id, T data); [CCode (cname = "BGThreadRunning", has_target = false, simple_generics = true)] public delegate int BGThreadRunning<T> (bool running, int id, T data); [CCode (cname = "ngSpice_Init", simple_generics = true)] public static int init<T> (Ngspice.SendChar<T>? send_char, Ngspice.SendStat<T>? send_stat, Ngspice.ControlledExit<T> controlled_exit, Ngspice.SendData<T>? send_data, Ngspice.SendInitData<T>? send_data_init, Ngspice.BGThreadRunning<T>? bg_thread_running, T data); A copy (without the wrapping): http://pastebin.com/u3HbaVpF The only weird thing about this is you can't use closures. The C API takes a single parameter to pass to all the callbacks, instead of one per callback like Vala expects, so you'll have to deal with that data param manually. Also, make sure it stays alive as long as you need it, otherwise you'll probably end up with a use-after-free bug. -Evan_______________________________________________ vala-list mailing list vala-list gnome org https://mail.gnome.org/mailman/listinfo/vala-list
Attachment:
signature.asc
Description: This is a digitally signed message part