I am writing a C application which I want to add scripting functionality to. I have decided to use AngelScript since it satisfies my requirements and can also be embedded in a C application, using its C bindings.
However, (this is where things get a little bit trickier). I want to make life eas(ier) for the application scripters, so I want to expose scriptable objects (which are C++ wrappers around my internal C data types etc), so that a user does not have to worry about memory management, dangling pointers etc.)
So, my question is that is it possible to expose C++ objects to AngelScript (for user scripting), whilst embedding the AngelScript engine itself in a C application by means of Angelscripts C binding?.
Embedding Angelscript in a C application and exposing C++ like objects to host (C) application
I'm a little bit confused about your situation.
If you are able to use C++ wrappers for your C data types, why do you need to use the C interface for AngelScript? Why not use the C++ interface directly? The only use for the C interface is if you cannot use C++ code at all, i.e. your application is written in pure C.
The C interface doesn't understand C++ method pointers, so if you need to register C++ classes it needs to use the C++ interface, or else you need to use global wrapper functions for all C++ class methods.
If you are able to use C++ wrappers for your C data types, why do you need to use the C interface for AngelScript? Why not use the C++ interface directly? The only use for the C interface is if you cannot use C++ code at all, i.e. your application is written in pure C.
The C interface doesn't understand C++ method pointers, so if you need to register C++ classes it needs to use the C++ interface, or else you need to use global wrapper functions for all C++ class methods.
AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game
Hi Andreas,
Thanks for your quick response. The situation is as follows:
I am writing my code in pure ANSI C (actually, its mostly legacy C code). My users don't know - or care that the app is written in C - however, providing scripting in C++ will make things easier for them (and me) - because it allows to avoid some of the problems I mentioned earlier.
Your response has made me think - maybe it is not possible to do what I wanted to do.
Having said that, I notice that the source test application for the C binding has .cpp (instead of a 'c' extension file). Also, athough the cpp file also contains an extern "C" {} declaration, it contains a class declaration - which is not valid C syntax.
Could you confirm if AngelScript been tested in a pure C application compiled on Linux?
Thanks
Thanks for your quick response. The situation is as follows:
I am writing my code in pure ANSI C (actually, its mostly legacy C code). My users don't know - or care that the app is written in C - however, providing scripting in C++ will make things easier for them (and me) - because it allows to avoid some of the problems I mentioned earlier.
Your response has made me think - maybe it is not possible to do what I wanted to do.
Having said that, I notice that the source test application for the C binding has .cpp (instead of a 'c' extension file). Also, athough the cpp file also contains an extern "C" {} declaration, it contains a class declaration - which is not valid C syntax.
Could you confirm if AngelScript been tested in a pure C application compiled on Linux?
Thanks
To use the C interface you have to compile the library together with the C interface as a C++ dynamic library, that you will then link with in your C application. The C application will use the C interface header file, i.e. angelscript_c.h, instead of the C++ header file.
I have not tested it with a pure C application on Linux. Besides upgrading the interface to the latest version of AngelScript, I'm sure there won't be a lot of adjustments needed though.
Most C code can be compiled as C++ with only changes to the makefile, or very small changes to the C code. Is that an option for you? It would allow you to mix the old legacy C code with the C++ wrapper classes that you want to use as well as use the AngelScript C++ interface directly.
I have not tested it with a pure C application on Linux. Besides upgrading the interface to the latest version of AngelScript, I'm sure there won't be a lot of adjustments needed though.
Most C code can be compiled as C++ with only changes to the makefile, or very small changes to the C code. Is that an option for you? It would allow you to mix the old legacy C code with the C++ wrapper classes that you want to use as well as use the AngelScript C++ interface directly.
AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement