From: barmaley <ol...@so...> - 2015-10-02 03:05:57
|
Is there a way (typemap or pragma) to insert custom C# class into global or certain namespace? It's easy to add code to wrapped C++ classes with `%typemap(cscode)` - but not clear for adding C# classes... For example, SWIG [doc][1] for creating custom exceptions says: The boiler plate code above must be used in addition to a handcrafted `CustomApplicationException`: // Custom C# Exception class CustomApplicationException : global::System.ApplicationException { public CustomApplicationException(string message) : base(message) { } } But it's not clear how to add this class through interface file. [1]: http://www.swig.org/Doc3.0/CSharp.html#CSharp_custom_application_exception -- View this message in context: http://swig.10945.n7.nabble.com/SWIG-and-C-insert-empty-C-class-tp14536.html Sent from the swig-user mailing list archive at Nabble.com. |
From: Oleg S. <Ol...@so...> - 2015-10-02 03:18:38
|
Hello, Is there a way (typemap or pragma) to insert custom C# class into global or certain namespace? It's easy to add code to wrapped C++ classes with `%typemap(cscode)` - but not clear for adding C# classes... For example, SWIG [doc][1] for creating custom exceptions says: The boiler plate code above must be used in addition to a handcrafted `CustomApplicationException`: // Custom C# Exception class CustomApplicationException : global::System.ApplicationException { public CustomApplicationException(string message) : base(message) { } } But it's not clear how to add this class through interface file. [1]: http://www.swig.org/Doc3.0/CSharp.html#CSharp_custom_application_exception Thanks, Oleg |
From: Oleg S. <Ol...@so...> - 2015-10-02 17:49:00
|
Thanks for the reply Gareth! If I declare similar C++ class and extend it with cscode – it will get all the SWIG stuff for constructing the object on unmanaged side through swigcptr… Not very neat approach perhaps.. Manually adding the class to C# proj is a legit solution and that’s what I’m doing right now.. However, this breaks the entire “automaticity” brought by SWIG – so far I was able to create a wrapper for huge project, with a lot of customizations through interface files – never requiring manual modification on C# side with things much more complex than just pasting C# code ☺ Anyways, just curious if there is some hack to that.. If not, I’ll just keep doing it manually. Thanks, Oleg From: Gareth Francis [mailto:gfr...@gm...] Sent: Friday, October 02, 2015 1:31 AM To: Oleg Shirokikh <Ol...@so...> Subject: Re: [Swig-user] SWIG and C#: insert empty C# class The simplest way would be to declare the c++ equivalent in the interface file, and then use %typemap(cscode) on it. Or if you're writing the whole C# class anyway, just include it in the generated project as a manually written class. On 2 October 2015 at 03:45, Oleg Shirokikh <Ol...@so...<mailto:Ol...@so...>> wrote: Hello, Is there a way (typemap or pragma) to insert custom C# class into global or certain namespace? It's easy to add code to wrapped C++ classes with `%typemap(cscode)` - but not clear for adding C# classes... For example, SWIG [doc][1] for creating custom exceptions says: The boiler plate code above must be used in addition to a handcrafted `CustomApplicationException`: // Custom C# Exception class CustomApplicationException : global::System.ApplicationException { public CustomApplicationException(string message) : base(message) { } } But it's not clear how to add this class through interface file. [1]: http://www.swig.org/Doc3.0/CSharp.html#CSharp_custom_application_exception Thanks, Oleg ------------------------------------------------------------------------------ _______________________________________________ Swig-user mailing list Swi...@li...<mailto:Swi...@li...> https://lists.sourceforge.net/lists/listinfo/swig-user -- -------------------- Gareth Francis www.gfrancisdev.co.uk<http://www.gfrancisdev.co.uk> |
From: Oleg S. <Ol...@so...> - 2015-10-02 20:14:53
|
Gareth – Thanks again for the reply. It all makes sense but I think that maybe I’ve made some confusion here – the task is much simpler, almost trivial. Imagine I just have completely fixed piece of C# code – call it X, whatever, but you can imagine CustomApplicationException class as in my original letter. We can insert/paste X into existing wrapped classes with typemap(cscode), or insert X into intermediary class with pragma(imclasscode), etc. I’m looking for a way to just insert X in some global space or certain namespace of your choice – maybe even new .cs file, or existing one but outside of all other namespaces/classes.. That’s a tiny issue maybe not worth so much discussion – but now even for the curiosity it’d be nice to figure it out. So thanks for paying attention ☺ Regards, Oleg From: Gareth Francis [mailto:gfr...@gm...] Sent: Friday, October 02, 2015 10:58 AM To: Oleg Shirokikh <Ol...@so...> Subject: Re: [Swig-user] SWIG and C#: insert empty C# class It's worth looking at csbody, cscode, csbase etc mappings in csharp.swig. You'll find it under <swig install>/lib/csharp I think, The basic structure of the class is defined entirely by the typemaps, so if you like you can set the class to have a completely custom class body, or modify the structure of the swig memory management etc. If you do it's best to provide the common functions such as getCPtr, otherwise you'll need to override all of the in/out/argout/ctype/cstype typemaps to handle the new class structure. If the implementation of the needed class is entirely language-specific you could probably do some swig macros that force it to be implemented for each target language, and have a mostly generic interface. If you really want the c# class to be generated by swig, then just write it in c++ and let it be wrapped. On 2 October 2015 at 18:33, Oleg Shirokikh <Ol...@so...<mailto:Ol...@so...>> wrote: Thanks for the reply Gareth! If I declare similar C++ class and extend it with cscode – it will get all the SWIG stuff for constructing the object on unmanaged side through swigcptr… Not very neat approach perhaps.. Manually adding the class to C# proj is a legit solution and that’s what I’m doing right now.. However, this breaks the entire “automaticity” brought by SWIG – so far I was able to create a wrapper for huge project, with a lot of customizations through interface files – never requiring manual modification on C# side with things much more complex than just pasting C# code ☺ Anyways, just curious if there is some hack to that.. If not, I’ll just keep doing it manually. Thanks, Oleg From: Gareth Francis [mailto:gfr...@gm...<mailto:gfr...@gm...>] Sent: Friday, October 02, 2015 1:31 AM To: Oleg Shirokikh <Ol...@so...<mailto:Ol...@so...>> Subject: Re: [Swig-user] SWIG and C#: insert empty C# class The simplest way would be to declare the c++ equivalent in the interface file, and then use %typemap(cscode) on it. Or if you're writing the whole C# class anyway, just include it in the generated project as a manually written class. On 2 October 2015 at 03:45, Oleg Shirokikh <Ol...@so...<mailto:Ol...@so...>> wrote: Hello, Is there a way (typemap or pragma) to insert custom C# class into global or certain namespace? It's easy to add code to wrapped C++ classes with `%typemap(cscode)` - but not clear for adding C# classes... For example, SWIG [doc][1] for creating custom exceptions says: The boiler plate code above must be used in addition to a handcrafted `CustomApplicationException`: // Custom C# Exception class CustomApplicationException : global::System.ApplicationException { public CustomApplicationException(string message) : base(message) { } } But it's not clear how to add this class through interface file. [1]: http://www.swig.org/Doc3.0/CSharp.html#CSharp_custom_application_exception Thanks, Oleg ------------------------------------------------------------------------------ _______________________________________________ Swig-user mailing list Swi...@li...<mailto:Swi...@li...> https://lists.sourceforge.net/lists/listinfo/swig-user -- -------------------- Gareth Francis www.gfrancisdev.co.uk<http://www.gfrancisdev.co.uk> -- -------------------- Gareth Francis www.gfrancisdev.co.uk<http://www.gfrancisdev.co.uk> |
From: Oleg S. <Ol...@so...> - 2015-10-02 21:54:02
|
Here one working sol-n – may not be very neat, but it keeps the automatism that SWIG provides: I basically create .cs file with my custom C# code (class like CustomApplicationException) “near” my SWIG interface files. Then on the post-build event for the wrapper project, I just copy this .cs file to the folder where SWIG generates files (-outdir). This way you just write C# code once and every rebuild will get the custom C# class without SWIG wrapper there. Still looking for proper sol-n through the interface files, if one exists.. Hope this helps, Oleg From: Oleg Shirokikh Sent: Friday, October 02, 2015 1:00 PM To: 'Gareth Francis' <gfr...@gm...> Cc: 'swi...@li...' <swi...@li...> Subject: RE: [Swig-user] SWIG and C#: insert empty C# class Gareth – Thanks again for the reply. It all makes sense but I think that maybe I’ve made some confusion here – the task is much simpler, almost trivial. Imagine I just have completely fixed piece of C# code – call it X, whatever, but you can imagine CustomApplicationException class as in my original letter. We can insert/paste X into existing wrapped classes with typemap(cscode), or insert X into intermediary class with pragma(imclasscode), etc. I’m looking for a way to just insert X in some global space or certain namespace of your choice – maybe even new .cs file, or existing one but outside of all other namespaces/classes.. That’s a tiny issue maybe not worth so much discussion – but now even for the curiosity it’d be nice to figure it out. So thanks for paying attention ☺ Regards, Oleg From: Gareth Francis [mailto:gfr...@gm...] Sent: Friday, October 02, 2015 10:58 AM To: Oleg Shirokikh <Ol...@so...<mailto:Ol...@so...>> Subject: Re: [Swig-user] SWIG and C#: insert empty C# class It's worth looking at csbody, cscode, csbase etc mappings in csharp.swig. You'll find it under <swig install>/lib/csharp I think, The basic structure of the class is defined entirely by the typemaps, so if you like you can set the class to have a completely custom class body, or modify the structure of the swig memory management etc. If you do it's best to provide the common functions such as getCPtr, otherwise you'll need to override all of the in/out/argout/ctype/cstype typemaps to handle the new class structure. If the implementation of the needed class is entirely language-specific you could probably do some swig macros that force it to be implemented for each target language, and have a mostly generic interface. If you really want the c# class to be generated by swig, then just write it in c++ and let it be wrapped. On 2 October 2015 at 18:33, Oleg Shirokikh <Ol...@so...<mailto:Ol...@so...>> wrote: Thanks for the reply Gareth! If I declare similar C++ class and extend it with cscode – it will get all the SWIG stuff for constructing the object on unmanaged side through swigcptr… Not very neat approach perhaps.. Manually adding the class to C# proj is a legit solution and that’s what I’m doing right now.. However, this breaks the entire “automaticity” brought by SWIG – so far I was able to create a wrapper for huge project, with a lot of customizations through interface files – never requiring manual modification on C# side with things much more complex than just pasting C# code ☺ Anyways, just curious if there is some hack to that.. If not, I’ll just keep doing it manually. Thanks, Oleg From: Gareth Francis [mailto:gfr...@gm...<mailto:gfr...@gm...>] Sent: Friday, October 02, 2015 1:31 AM To: Oleg Shirokikh <Ol...@so...<mailto:Ol...@so...>> Subject: Re: [Swig-user] SWIG and C#: insert empty C# class The simplest way would be to declare the c++ equivalent in the interface file, and then use %typemap(cscode) on it. Or if you're writing the whole C# class anyway, just include it in the generated project as a manually written class. On 2 October 2015 at 03:45, Oleg Shirokikh <Ol...@so...<mailto:Ol...@so...>> wrote: Hello, Is there a way (typemap or pragma) to insert custom C# class into global or certain namespace? It's easy to add code to wrapped C++ classes with `%typemap(cscode)` - but not clear for adding C# classes... For example, SWIG [doc][1] for creating custom exceptions says: The boiler plate code above must be used in addition to a handcrafted `CustomApplicationException`: // Custom C# Exception class CustomApplicationException : global::System.ApplicationException { public CustomApplicationException(string message) : base(message) { } } But it's not clear how to add this class through interface file. [1]: http://www.swig.org/Doc3.0/CSharp.html#CSharp_custom_application_exception Thanks, Oleg ------------------------------------------------------------------------------ _______________________________________________ Swig-user mailing list Swi...@li...<mailto:Swi...@li...> https://lists.sourceforge.net/lists/listinfo/swig-user -- -------------------- Gareth Francis www.gfrancisdev.co.uk<http://www.gfrancisdev.co.uk> -- -------------------- Gareth Francis www.gfrancisdev.co.uk<http://www.gfrancisdev.co.uk> |
From: William S F. <ws...@fu...> - 2015-10-06 20:43:49
|
You can add any code you like into the intermediary class using %pragma(csharp) imclasscode=%{ ... %} in the same way that csharphead.swg does. You can also add code into the module class using %pragma(csharp) modulecode=%{ ... %} William On 2 October 2015 at 03:13, barmaley <ol...@so...> wrote: > Is there a way (typemap or pragma) to insert custom C# class into global or > certain namespace? It's easy to add code to wrapped C++ classes with > `%typemap(cscode)` - but not clear for adding C# classes... > > For example, SWIG [doc][1] for creating custom exceptions says: > > The boiler plate code above must be used in addition to a handcrafted > `CustomApplicationException`: > > // Custom C# Exception > class CustomApplicationException : global::System.ApplicationException { > public CustomApplicationException(string message) > : base(message) { > } > } > > But it's not clear how to add this class through interface file. > > [1]: > http://www.swig.org/Doc3.0/CSharp.html#CSharp_custom_application_exception > > > > > -- > View this message in context: http://swig.10945.n7.nabble.com/SWIG-and-C-insert-empty-C-class-tp14536.html > Sent from the swig-user mailing list archive at Nabble.com. > > ------------------------------------------------------------------------------ > _______________________________________________ > Swig-user mailing list > Swi...@li... > https://lists.sourceforge.net/lists/listinfo/swig-user |