Hi, Well, it works if I don't use the ICUEnumeration class. The first call returns an NBExternalAddress instance. If I pass this instance to the second call than it works fine. The native call looks like this: self nbCall: #( char* uenum_next_48(void* aHandle, nil, ICUErrorCodeNB* anErrorCode ) ) My idea was to use a subclass of NBExternalHandle where I can put all the functions related to this handle. But it stops working when I copy the value from the ExternalAddress to my handle subclass ICUEnumerationNB and use one of these calls: self nbCall: #( char* uenum_next_48(ICUEnumerationNB* aHandle, nil, ICUErrorCodeNB* anErrorCode ) ) or self nbCall: #( char* uenum_next_48(ICUEnumerationNB aHandle, nil, ICUErrorCodeNB* anErrorCode ) ) Jan. On Tue, Feb 14, 2012 at 10:10 PM, Igor Stasenko <siguctua@gmail.com> wrote:
On 14 February 2012 22:59, Jan van de Sandt <jvdsandt@gmail.com> wrote:
I started with a new image and loaded ConfigurationOfNativeBoost. But it's still not working.
First I do a call to get a handle:
"UEnumeration* ucal_openTimeZones(UErrorCode * ec)"
self nbCall: #( void* ucal_openTimeZones_48( ICUErrorCodeNB* anErrorCode ) ) module: 'libicui18n.dylib'
This call succeeds. I store the result in a subclass of NBExternalHandle using the #value: class method.
In the second call I want to use the handle to retrieve the next element:
self nbCall: #( char* uenum_next_48(ICUEnumerationNB* aHandle, int* nil, ICUErrorCodeNB* anErrorCode ) ) module: 'libicuuc.dylib'
But this call still causes the image to disappear. I think the nil and errorCode arguments are all right. Is there something wrong with the first argument?
I cannot say precisely, because i don't see a code.. so lets see..
UEnumeration* U_EXPORT2 ucal_openTimeZones ( UErrorCode * ec )
returns a pointer. And you storing the pointer value to instance of ICUEnumerationNB
Now i guess that next function should take that pointer value:
char* uenum_next_48(ICUEnumerationNB aHandle, int* nil, ICUErrorCodeNB* anErrorCode )
but not a pointer to pointer value, like you wrote:
char* uenum_next_48(ICUEnumerationNB* aHandle, int* nil, ICUErrorCodeNB* anErrorCode )
Jan.
On Tue, Feb 14, 2012 at 11:34 AM, Igor Stasenko <siguctua@gmail.com>
wrote:
On 13 February 2012 22:40, Jan van de Sandt <jvdsandt@gmail.com> wrote:
Hello list,
I want to call the following C function using NativeBoost:
const char* uenum_next(UEnumeration * en, int32_t * resultLength, UErrorCode * status)
According to the (icu4c) documentation you can pass NULL for the resultLenth argument [1]. But when I try:
self nbCall: #( char* uenum_next_48( self, nil, ICUErrorCodeNB* anErrorCode ) ) module: 'libicuuc.dylib'
should be no problem. you can try also to just pass zero, if it make any difference
self nbCall: #( char* uenum_next_48( self, 0 , ICUErrorCodeNB* anErrorCode ) ) module: 'libicuuc.dylib'
(in fact code generator should produce same code, since nil substituted by 0 at the end).
Maybe the problem is not there, but in other arguments you passing.
And, i recommend you to use ConfigurationOfNativeBoost from NBInstaller, but not latest packages directly, since Javier put a lot of changes lately and some parts might not work properly.
My image craches. Does anyone know what I'm doing wrong?
Jan.
[1]
http://icu-project.org/apiref/icu4c/uenum_8h.html#a99298eabaa3874cdfd9793b20...
-- Best regards, Igor Stasenko.
-- Best regards, Igor Stasenko.