Ok, I think I found the answer to my own question.. it seems thats what
delegates are for:
public static delegate void malocfp (void* ctxp, size_t* sz);
public static delegate void ralocfp (void* ctxp, void* memptr, size_t*
newsz);
public static delegate void mfreefp (void* ctxp, void* memptr);
[CCode (cname = "OCIEnvCreate")]
private int Create (
out Environment* env,
Mode mode,
void* ctxp,
malocfp* malocfp,
ralocfp* ralocfp,
mfreefp* mfreefp,
size_t xtramemsz,
out void* usrmempp
);
Could someone corrent me if I'm wrong?
Appreciate it!
SMF 8D
On Sat, 2009-06-13 at 18:36 -0600, Shawn Ferris wrote:
> Hi all --
>
> I've decided I wanna try writing the Oracle OCI bindings for vala.. It's
> probably way out of my league, but I'm gonna try anyway.. unfortunately,
> I don't know C very well, so right out of the gates I'm stuck.. but I
> think if I can get past this, I'm hoping with what I've already learned
> plus this piece, perhaps I'll be able to do the rest.
>
> What I'm doing is working from a sample oci program, trying to implement
> just enough of the vapi to support the sample program.. then extend the
> vapi further as I need it.
>
> Here's what I'm working from, so far:
>
> OCIEnv* env;
> r=OCIEnvCreate( &env, OCI_DEFAULT, 0, 0, 0, 0, 0, 0);
>
> Here's my vapi:
>
> [CCode (cheader_filename = "oci.h")]
> namespace OCI {
>
> [CCode (cname = "OCIEnv")]
> public struct Environment { }
> [CCode (cname = "OCIEnvCreate")]
> public int Create (
> void* env,
> Mode mode,
> void* (ctxp),
> void* malocfp,
> void* ralocfp,
> void* mfreefp,
> size_t xtramemsz,
> void** usrmempp
> );
>
> }
>
> (I've got the Mode enum in place too.. just didn't include it here)
>
> This is a blurb from the oci header:
>
> sword OCIEnvCreate ( OCIEnv **envhpp,
> ub4 mode,
> const void *ctxp,
> const void *(*malocfp)
> (void *ctxp,
> size_t size),
> const void *(*ralocfp)
> (void *ctxp,
> void *memptr,
> size_t newsize),
> const void (*mfreefp)
> ( void *ctxp,
> void *memptr))
> size_t xtramemsz,
> void **usrmempp );
>
>
> And here's my vala test:
>
> OCI.Environment* env;
> var rt = OCI.Create(&env,Mode.DEFAULT, 0, 0, 0, 0, 0, 0);
>
> env, mode and xtramemsz seem to be working fine how they're defined in
> the vapi.. it's the other 5 that I can't figure out. I believe malocfp,
> ralocfp and mfreefp are callback functions, but with my lack of c
> knowledge, I don't see how it should be ok to pass an int in the case of
> the example. (0) If I redefine the inputs as int, everything compiles
> fine but I'm guessing thats not correct and if I really did have a
> callback function implemented, it would die a horrible death.. so I'd
> like to get it right before continuing.
>
> The error I'm getting is: 'Cannot convert from `int' to `void*'' and I
> understand the error.. just don't know enough about it to avoid it.. no
> pun intended..
>
> SOO.. if someone would kindly give me a clue, I think armed with that
> knowledge, I may actualy figure this out before too long.
>
> Appreciate the help!
>
> SMF
>
_______________________________________________
Vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list