Let's say you have a shared C library (called testlib.so) with the following function signature:
void func1(int *buf); How would you use uFFI to call this function? How would you complete the following code fragment: self ffiCall: #( void func1(??? buf) ) module: 'testlib.so'. where buf should hold whatever integer value func1 puts into it. Maybe buf needs to be prepared somehow before the ffiCall? horrido wrote > Je comprends enfin... > > I accidentally came across a StackOverflow answer that suggested the > String object is immutable. That makes perfect sense, as I know the C > function is actually /* > trying */ > to write to the buffer. > > That gave me the idea to use a ByteArray instead. Now, everything works! > > horrido wrote >> There is shockingly very little documentation on how to use uFFI. In >> particular, I have the following situation... >> >> A shared C lib has the following function: >> >> void get_machine(char *machine) { >> uname(&uname_s); >> strcpy(machine, uname_s.machine); >> } >> >> It copies the content of a string value into the buffer passed to it >> (char *machine). >> >> I want to call this function from Pharo, thus: >> >> buffer := String new: 64. >> self ffiCall: #( void get_machine(String buffer) ). >> >> The buffer never receives the string value (it just contains the 64 >> initiialized spaces). >> >> Clearly, I'm misunderstanding the proper mechanism for doing this. >> >> [There are other functions in the shared C lib that work fine, such as: >> >> uint get_uptime() { >> sysinfo(&info); >> return info.uptime; >> } >> >> Returning integers or floats is no problem. But passing arguments by >> reference seems to be verboten.] -- View this message in context: http://forum.world.st/How-to-use-uFFI-with-String-tp4947890p4948184.html Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.