Hi,
I have a problem with a nativeboost call, but�� I don't see what I do wrong.
�� library function prototype is:
��int zmq_getsockopt (void *socket, int option_name, void *option_value, size_t *option_len);
my calling method in pharo is:
zmq_getsockopt: socket option_name: option_name option_value: option_value option_len: option_len
�� �� �� �� <primitive: #primitiveNativeCall module: #NativeBoostPlugin error: errorCode>
�� �� �� �� ^self nbCall: #(int zmq_getsockopt (void *socket, int option_name, void * option_value, size_t* option_len)�� )
when I call it with
...
optionValue := (NBExternalArray ofType: 'int') externalNew: 1.��
optionLen := (NBExternalArray ofType: 'size_t' ) externalNew: 1.
[�� �� �� ��optionValue at: 1 put: 0 .
�� �� �� �� optionLen at: 1 put: (NBExternalType sizeOf: 'int')�� .��
�� �� �� �� rc := self zmq_getsockopt: socket option_name: option_name
�� �� �� �� �� �� �� �� �� �� �� �� option_value:�� optionValue
�� �� �� �� �� �� �� �� �� �� �� �� option_len: optionLen�� .
�� �� �� �� value := optionValue at: 1 .
] ensure: [�� optionValue free.
�� �� �� �� �� �� �� �� optionLen free�� ].
...
I allways get an exception: "error during FFI call : nil"
After stepping in NBFFICallout generation, I found something strange, the code
generation seems not to be called because lastError stays at nil ?
handleFailureIn: aContext nativeCode: aBlock
�� �� �� �� lastError := self getErrorFrom: aContext lastError: NativeBoost lastError.
�� �� �� ��
�� �� �� �� >>getErrorFrom: aContext lastError: errorCode
�� �� �� �� ��...�� checks�� pragmas etc
�� �� �� �� >>getErrorFrom: aContext lastError: errorCode
�� �� �� �� ...�� �� �� �� �� �� ��lastError := aContext�� tempAt: method numTemps.
�� �� �� �� �� �� �� �� => lastError = nil ???�� shouldn't be ErrNoNativeCodeInMethod ?
�� �� �� �� "install native code and retry the send"
�� �� �� �� lastError = ErrNoNativeCodeInMethod
�� �� �� �� �� �� �� �� ifTrue: [ ^ self generateCode: aBlock andRetry: aContext ].
�� �� ��never gets called ...
�� �� �� �� "ok, we're out of options, signal an error here"
�� �� �� �� ^ self signalError: lastError
Could it be because I use this image on windows and unix ?
Or because I had an exception at prototype parsing the first time
because I forgot a ; at the end of the prototype ?
Is my prototype correct or is it the origin of the error ?
Is there a way to reset the lastError (aContext�� tempAt: method numTemps) ?
I will try to reset it in debugger but may be there is a cleaner way ?
would it be ok to change�� the test in handleFailure to
(lastError = ErrNoNativeCodeInMethod) or:[ lastError isNil ] ?
(I can open a bug in this case )
Any idea or comment is welcome
Thanks in advance
Alain