Exposing an ISO C++ class to C#

后端 未结 3 1632
北荒
北荒 2021-02-19 07:01

I need to expose some C++ classes to C# (I am building on Linux, using mono, so COM is not an option)

The evidence I have gathered so far suggests that the best way to a

相关标签:
3条回答
  • 2021-02-19 07:18

    Mono has recently made some pretty big strides with C++ interoperability in CXXI (pronounced sexy).

    From this posting, the short story is that the new CXXI technology allows C#/.NET developers to:

    • Easily consume existing C++ classes from C# or any other .NET language
    • Instantiate C++ objects from C#
    • Invoke C++ methods in C++ classes from C# code
    • Invoke C++ inline methods from C# code (provided your library is compiled with -fkeep-inline-functions or that you provide a surrogate library)
    • Subclass C++ classes from C#
    • Override C++ methods with C# methods
    • Expose instances of C++ classes or mixed C++/C# classes to both C# code and C++ as if they were native code.

    CXXI is the result of two summers of work from Google's Summer of Code towards improving the interoperability of Mono with the C++ language.

    0 讨论(0)
  • 2021-02-19 07:21

    you had to write a c++ managed wraper around your iso c++ class like this

     public ref class MyWrapper
        {
        public:
        MyWrapper (void)
        {
        pObj = new CMyUnmanagedClass();
        }
        ~MyWrapper (void)
        {
        delete pObj;
        }
        int foo(void)
        {
        //pass through to the unmanaged object
        return pObj->foo();
        }
        private:
        CMyUnmanagedClass* pObj;
        };
    

    i hope this help regards

    0 讨论(0)
  • 2021-02-19 07:32

    You can't do C++/.NET classes on Linux using Mono. Mono doesn't support Managed C++ or C++/CLI, so there is no way to "Write a wrapper C++.Net class around the ISO C++ class".

    Your best option for this is to generate a C API for your C++ class, which can be accessed via Platform Invoke.

    That being said, one option for easing this is to use SWIG to generate the wrappers for you. It supports generation of C# wrappers from C++ classes (as well as wrappers to other languages), and works well on Linux/Mono.


    Edit:

    For an official "Mono doesn't support mixed mode C++/CLI", see the Languages page:

    It's important to note that any language that compiles to pure IL should work under Mono. Some languages such as Microsoft's Managed C++ do not always compile to pure IL, so they will not always work as expected, since they are not truly platform independent.

    C++/CLI for native interop requires non-pure IL, so it will not work on Mono.

    0 讨论(0)
提交回复
热议问题