Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > va_list in JNI

Reply
Thread Tools

va_list in JNI

 
 
leonwild@hotmail.com
Guest
Posts: n/a
 
      06-23-2005
Can anyone tell me if it is possible to call a C function which
contains a va_list parameter from java code. I have a existing library
that I wish to use by creating a Java wrapper around the code.

 
Reply With Quote
 
 
 
 
Stefan Schulz
Guest
Posts: n/a
 
      06-23-2005
On Thu, 23 Jun 2005 06:41:52 -0700, leonwild wrote:

> Can anyone tell me if it is possible to call a C function which
> contains a va_list parameter from java code. I have a existing library
> that I wish to use by creating a Java wrapper around the code.


Depends on what you want to do. You can call a variadic function from JNI
code just fine, with the usual caveats. However, you can not use
C-Style variadic arguments to create a java-style variadic function.

In C, all arguments are pushed to the stack, and variadic functions
actually go "beyond" the last named argument further down the stack. In
java, variadic arguments actually _are_an_array_ of the declared type
(this is why you need to specify type... instead of just ...) that is
implicitly generated by the compiler once a variadic function is called.

--
You can't run away forever,
But there's nothing wrong with getting a good head start.
--- Jim Steinman, "Rock and Roll Dreams Come Through"


 
Reply With Quote
 
 
 
 
leonwild@hotmail.com
Guest
Posts: n/a
 
      06-23-2005
Basically I have C functions in a library which interface with a
duplicated database system. I don't have the luxury of modifying these
C functions. What I wanted to do was provide a bridge with JNI so I
could call the C functions from my Java code. Obviously when selecting
data you can have any number of columns and data types. The C functions
have prototypes like:

int select(char* table, char*columns, char* where, <va_list of
variables for data retrieval>)

Can you provide an example of how to pass the va_list parameters to the
C code so I can retreive the data? I suppose I could write callback
functions and seperate data structures but I'd like to stay as close to
the original code as possible.

 
Reply With Quote
 
Stefan Schulz
Guest
Posts: n/a
 
      06-23-2005
On Thu, 23 Jun 2005 07:09:29 -0700, leonwild wrote:


> int select(char* table, char*columns, char* where, <va_list of
> variables for data retrieval>)
>
> Can you provide an example of how to pass the va_list parameters to the
> C code so I can retreive the data? I suppose I could write callback
> functions and seperate data structures but I'd like to stay as close to
> the original code as possible.


How are these variables used? Are they used in scanf style (pointers to
locations?) or are they used as "rvalues", which can only be read, but
never assigned? If the former, you probably can't do it without jumping
through more hoops then it's worth. In the later, you might just be able
to get away with dirty tricks using the knowledge of how the stack is
organized. DO NOT DO THIS! Whoever will have to look at your program
afterwards will curse and all your progeny.

In general, this is quite a hard problem, since you will muck with
the stack layout (which is a disaster waiting to happen, and about as
importable as it gets). Are you sure you can not get away with a static
version of the function? va_list is, as defined, pretty much a read-only
structure, and creating one on the fly is not really intended.

If i where you, i would build an intermediate layer, instead of trying to
force-fit these parts together. But... your program, your problem, your
endless grief.

--
You can't run away forever,
But there's nothing wrong with getting a good head start.
--- Jim Steinman, "Rock and Roll Dreams Come Through"


 
Reply With Quote
 
leonwild@hotmail.com
Guest
Posts: n/a
 
      06-23-2005
Thanks for the info. I think I'll write in an extra layer which will
pretend to be a bit like the JDBC but call my C library functions
underneath.

As you say, my headache. (But I've got plenty of paracetamol in my
desk, lol)

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
JNI thread vs. native thread vs. JNI call bgabrhelik Java 0 09-29-2009 03:33 PM
Re: JNI: Error loading DLL from JNI DDL vasanth Java 0 01-25-2005 11:03 AM
Re: JNI: Error loading DLL from JNI DDL vasanth Java 0 01-25-2005 11:01 AM
Porting JNI Windows under JNI LINUX + Wine ? Pasturel Jean-Louis Java 5 03-03-2004 07:50 PM
IBM's JNI fails where Sun's JNI works Alex Hunsley Java 4 11-04-2003 10:34 AM



Advertisments