Page 1 of 1

PostPosted: Mon Jul 04, 2005 5:01 pm
by izzy

I'm pretty new at C, and I cannot figure this one out. I'm trying to write a PocketC library. I need to call a string array within a function (since I can't access globals in a library, I think). So I called it like this;
char *weekday[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
Now, when I access a single element, say;
CodeWarrior will give me 7 (the amount of elements) link errors stating:
'@443' has illegal single segment 32-bit reference to '@436'
the next error will say the same but to '@437' and so forth.

Can anyone help me or direct me where I can get help?

PostPosted: Mon Jul 04, 2005 5:29 pm
by mgreen
You have to look at the documentation "native.html" and the much too simple examples in the folder PocketCLib, both in the distribution files.

Typically, you have to pass a pointer to a string array to the function. In the native function, you have to dereference the pointer using the call-back functions (pop deref), index into the array and get the Pocket C string reference, then dereference the string pointer using another call-back function that locks the string in place (lockString), then be sure to unlock the string with another call-back function (unlockString) when you're finished with it.

I wrote an interface to BTPrint (a printing package) for PocketC in Palm Pascal that's available on their website. The interface does access single string values using the call-back functions.

PostPosted: Tue Jul 05, 2005 12:55 am
by izzy
Thank you for answering.

I'm not sure you understood me. The string array is called and accessed inside the same library function, not in the PocketC code. It's not done with Values, but with a standard char* array. From what I understand, the PocketCLib API should not be called here.

PostPosted: Wed Jul 06, 2005 1:48 am
by dewey
This may be because the strings are being store in a data segment, which is not compatible with native libraries.

Ensure that the PC-relative strings option is enabled in your project.

PostPosted: Wed Jul 06, 2005 4:24 pm
by izzy
It was enabled. Does the PC-relative Constant Data also need to be enabled? Anyway, I tried both ways and still got the same error.

PostPosted: Thu Jul 07, 2005 1:28 am
by dewey
Try breaking down the initialization:
char* weekday[7];
weekday[0] = "Sunday";

This array is a local variable in a function, correct?