[Pharo-project] Question about FFI and constants

Mariano Martinez Peck marianopeck at gmail.com
Wed Sep 30 12:30:38 EDT 2009


Hi folks: I am calling to the OpenDBX library and this library uses C
constants. Suppose something like this:

enum odbxerr {
    ODBX_ERR_SUCCESS,
#define ODBX_ERR_SUCCESS   ODBX_ERR_SUCCESS
    ODBX_ERR_BACKEND,
#define ODBX_ERR_BACKEND   ODBX_ERR_BACKEND
    ODBX_ERR_NOCAP,
#define ODBX_ERR_NOCAP   ODBX_ERR_NOCAP
    ODBX_ERR_PARAM,
.........


Then I have a function like this:

char* odbx_error( odbx_t* handle, int error )

In that case the int error es the index of the array or I can use the
constant.
Right now, I am using int from 0 to N. But I would like to invoke calls to
that function using Smalltalk Strings that represent C constants.

For example, now I have this:

OpenDBXUnix>>apiError: handle number: err
    "long odbx_error(odbx_t*, int)"
    <cdecl: char* 'odbx_error' (ulong long) module: 'opendbx' >
    ^self externalCallFailed

And I call them this way for example:

OpenDBXUnix apiError:  handle number: 1.

But, I would love to do:

OpenDBXUnix apiError:  handle number: 'ODBX_ERR_BACKEND'.

Of course this fails because it cannot coerce and String to a long.

So, that someone know how can I do this (if I can) ?

Thanks

Mariano
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/attachments/20090930/1f0a2320/attachment-0001.html>


More information about the Pharo-dev mailing list