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
[email protected]
https://mail.gnome.org/mailman/listinfo/vala-list