[Glass] Passing a enum element to a C library

bruno buzzi brassesco smalltalk at adinet.com.uy
Wed Jul 1 17:39:07 PDT 2020


James,
I already tried that but the "function call" answer an argument type 
mismatch:
a ArgumentError occurred (error 2718), arg 2 is neither nil, a CPointer 
nor a CByteArray

ArgumentError (AbstractException) >> _signalWith: @5 line 25
ArgumentError (AbstractException) >> signal: @3 line 7
ArgumentError class (AbstractException class) >> signal: @3 line 4
CCallout >> callWith: @3 line 28
GS_libssh_4_8_5 >> ssh_options_set_:_:_: @2 line 7
Libssh485 >> basicSetHostName: @5 line 7
Libssh485Test >> testBasicSetHostName @2 line 3

regards,
bruno

On 1/7/2020 20:52, James Foster wrote:
> It seems to me that the function should be interpreted as (#’ptr’ #’int’ #’ptr’) since an enum is simply an integer. Try passing it just 0 and see if that goes through.
>
> James
>
>> On Jul 1, 2020, at 4:41 PM, bruno buzzi brassesco via Glass <glass at lists.gemtalksystems.com> wrote:
>>
>> Hi,
>>
>> How to pass an enum element to a C library.
>> C function signature:
>> int ssh_options_set(ssh_session session, enum ssh_options_e type, const void *value)
>>
>> The enum is defined as:
>> enum ssh_options_e {
>>    SSH_OPTIONS_HOST,
>>    SSH_OPTIONS_PORT}
>>
>> An any C call is like:
>> ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, "localhost");
>>
>> GS generated wrapper:
>> ssh_options_set_: session _: type _: value
>>      "Interpreted as #int32 from #( #'ptr' #'ptr' #'ptr' )"
>>      ^Functionssh_options_set callWith: { session. type. value }
>>
>> In GS i tried something like:
>> myLibrary ssh_options_set_: session _: optionHost _: hostName
>> where
>> session: is created in another successful call to myLibrary
>>
>> optionHost:
>> cStructPointer := CByteArray gcMalloc: 8.
>> cStructPointer uint64At: 0 put: 0. "0 correspond to SSH_OPTIONS_HOST - maybe i'm wrong"
>>
>> hostName: CByteArray withAll: 'localhost'
>>
>> But it seems that something is wrong. The chapter 18 do something like this with another library.
>> So [optionHost] or [hostName] has a wrong value...
>> For now no successful call passing an enum element.
>>
>> Now back to fight with C :)
>>
>> regards,
>> bruno
>>
>> _______________________________________________
>> Glass mailing list
>> Glass at lists.gemtalksystems.com
>> https://lists.gemtalksystems.com/mailman/listinfo/glass


More information about the Glass mailing list