Passing string to an external C function

BlitzMax Forums/BlitzMax Programming/Passing string to an external C function

timbarrass(Posted 2006) [#1]
Hi all,

I'm having trouble figuring out how to pass a string to an external C function (incidentally in a library). Library's built fine, and I can happily import/link it within BMax. However, it looks like nothing happens.

My .bmx looks like:

Import "test.a"

Extern
	Function test( url:String )
End Extern

test( "Hi there" )


I put test() in test.c below, then

$ gcc -c test.c
$ ar rc test.a test.o
$ ranlib test.a

void test( char url[] )
{
  printf( "%s", "Hi there all, this is a test" );
  printf( "%s", url );
}


The only thing that appears to stdout is Hi there, this is a test... so:

1. How does one pass a string to an external C function from bmx?
2. Out of interest, why does the C output to stdout appear after the main (GUI) app quits? Any way of setting the buffer to flush immediately a la perl $|=1?

Cheers,
Tim


klepto2(Posted 2006) [#2]
Try it with :
Extern
	Function test( url$z ) 'what means CString 
End Extern



timbarrass(Posted 2006) [#3]
Nice one k2; that works fine. Are those identifiers documented anywhere?

Thanks for the help!


klepto2(Posted 2006) [#4]
Not really, you could see them if you take a closer look to the different module sources.


timbarrass(Posted 2006) [#5]
Ok ta, will take a closer look, thanks for the pointers!


splinux(Posted 2006) [#6]
See my previous post here:
http://www.blitzmax.com/Community/posts.php?topic=56160
http://www.blitzmax.com/Community/posts.php?topic=55869

Maybe they could be helpful.