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. |