Calling BMax functions from C
BlitzMax Forums/BlitzMax Programming/Calling BMax functions from C| 
 | ||
| Hi Guys, I know you can call C functions by creating a BMax wrapper function (so to speak), but is there anyway I could call a BMax function from within a C function. Any help would be great. | 
| 
 | ||
| Not in a static way im afraid, you have to pass a pointer to the function to C and then call it. heres a simple example, using a global variable. but you could pass it via a type or parameter if you wanted. test.bmx Framework BRL.Blitz SuperStrict Import "test.c" Extern "c" Global bmx_test_func() Function c_test() EndExtern Function bmx_test() WriteStdout "BlitzMax!~n" EndFunction bmx_test_func = bmx_test c_test() test.c 
void (*bmx_test_func)();
void c_test() {
	puts("calling blitzmax function from c");
	if(bmx_test_func)
		bmx_test_func();
	else
		puts("oops");
}
 | 
| 
 | ||
|  is there anyway I could call a BMax function from within a C function.  Sure you can, and in a static way! :-) Example. func_test.bmx SuperStrict Framework BRL.StandardIO Import "func_test.c" Extern Function call_test:Int() End Extern Print call_test() Function myFunction:Int() Return 15 End Function func_test.c 
extern int bb_myFunction();
int call_test();
int call_test() {
	return bb_myFunction();
}
:o) | 
| 
 | ||
| I don't like function pointers, Mr Grable :-p | 
| 
 | ||
| Excellent, thanks guys that helps me out a lot, so simple too. | 
| 
 | ||
| Ooh.. nice, i tried that, but not without the preceding _ . nice to know :) Hehe brucey, i love them. to each his own right? :P | 
| 
 | ||
|  but not without the preceding _  If you are calling a Module Type Function, you need to add an _ to the name: eg : void _bah_libtcod_TCODSystem__Flush(bool render); For plain functions, it's just bb_ in front. Function names are case-sensitive. |