[squeak-dev] Re: Question about FFI and constants
Andreas Raab
andreas.raab at gmx.de
Wed Sep 30 16:50:34 UTC 2009
Use symbolic constants (pool/class vars), i.e.,
ODBXConstants class>>initialize
ODBXErrSuccess := 1.
"..."
and then
OpenDBXUnix apiError: handle number: ODBXErrBackend.
Cheers,
- Andreas
Mariano Martinez Peck wrote:
> 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 Squeak-dev
mailing list
|