C++ class
BlitzMax Forums/BlitzMax Programming/C++ class
| ||
Hi, Am I right in thinking that in order for BlitzMax to use a C++ class I would have to write a .c wrapper to create an instance of the class and to access the member funcitons and then, finally a .bmx wrapper? Any help, *pointers most appreciated. |
| ||
It would probably be better to use a .cpp wrapper. You can have the wrapper return a pointer to the C++ object, which you can later use to pass back and do stuff with. Remember, if you create a C++ object with "new", you may also need to "delete" it later. :o) |
| ||
Ok, thanks for the advice. |
| ||
Perhaps something along the lines of this completely untested code : test.cpp class MyClass { public: MyClass(); void DoSomething(); } MyClass::MyClass() {} void MyClass::DoSomething() { } extern "C" { MyClass * create_new_myclass(); void myclass_dosomething(MyClass * myclass); } MyClass * create_new_myclass() { return new MyClass(); } void myclass_dosomething(MyClass * myclass) { myclass->DoSomething(); } testwrap.bmx Superstrict Import "test.cpp" Extern Function create_new_myclass:Byte Ptr() Function myclass_dosomething(myclass:Byte Ptr) End Extern Local b:Byte Ptr = create_new_myclass() myclass_dosomething(b) |
| ||
Thanks again! Guess I'll buy BlitzMax then. |
| ||
ohh....thx brucey :-) always wondered myself, just didnt want to ask ;-) p.s hows you ffmpeg mod coming? |
| ||
unless i'm very much mistaken, and i'm not, you can't wrap C++ functions directly. Well I guess you might if you knew what internal post decorated name the functions had. but the above untested example won't work. Believe me, I've tried. |
| ||
but the above untested example won't work. Oh... bugger... well... it seemed a good idea at the time. FYI :-) Some "real" code snippets, from my DateTime module (wrapping the C++ Boost libs): .. creating a new instance of a C++ class .. time_duration * bmx_time_duration(int hours, int minutes, int seconds, int fraction) { return new time_duration(hours, minutes, seconds, fraction); } ... using that instance ... int bmx_time_duration_hours(time_duration * d) { return d->hours(); } Which part of that won't work? |
| ||
Sorry... the .bmx bits too... just for clarity :-) ..in the extern.. Function bmx_time_duration_hours:Int(duration:Byte Ptr) ..in the main code.. Method hours:Int() Return bmx_time_duration_hours(durationPtr) End Method |
| ||
Guess I'll buy BlitzMax then. Geepers... where's my commission? :-p |