[Pharo-project] [squeak-dev] Question about FFI and constants

Hernán Morales Durand hernan.morales at gmail.com
Wed Sep 30 19:33:20 EDT 2009


Another alternative to what Andreas suggested is to reify in
meaningful messages the constants, see senders of
YAZODRFFILibrary>>odrCreate: in the Z3950 project at SqueakSource.
Cheers,

Hernán

2009/9/30 Mariano Martinez Peck <marianopeck at gmail.com>:
> 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
>
>
>
>
>
>




More information about the Pharo-dev mailing list