10

I am wondering what's the way to call a c# class method from C++(Native, not C++ CLI) code? Need simple and elegant way

2
  • 4
    As cool as it may be the thought hurts Commented Nov 26, 2010 at 6:36
  • 1
    possible duplicate of Calling C# code from C++ Commented Apr 21, 2014 at 16:21

4 Answers 4

12

You can embed any CLR assembly (C#, VB.NET, F#, ...) in a native C++ program using what's called "CLR Hosting". This is how native programs (such as SQL Server) support .NET code extensions. E.g. SQL CLR in SQL Server.

You load the CLR into a native process using CorBindToRuntimeEx() for .NET 2.0 and CLRCreateInstance() in .NET 4.

Details can be found on MSDN, or Jeff Richter's book CLR via C#.

Sign up to request clarification or add additional context in comments.

Comments

9

Turn your C# assembly into a COM visible one and use COM interfaces. That is the only way to make it work beside self made IPC as far as I know. The problem comes from the .NET environment under which the .NET assembly must run and C++ runs under its native C++ environment.

The only way of communicating is either an IPC mechanism (sockets, ...) or use COM, as the processes have to be "decoupled".

Here is a tutorial for the COM based solution:

2 Comments

According to Sasha there are 2 more ways actually.
Yup, there's no requirement for the "decoupling" suggested. The ".Net" environment is basically mscoree.dll, and it can load in native processes.
9

Sasha Goldshtein is the man for this stuff:

There are again several ways to do it: 1. Reverse P/Invoke (has to start from .NET delegate passed as callback, so this is only good if the "action" begins in your .NET code); 2. COM interop (every .NET class can also be a COM object, with or without explicit interfaces); 3. C++/CLI wrapper classes.

See http://blogs.microsoft.co.il/blogs/sasha/archive/2008/02/16/net-to-c-bridge.aspx

See also :
http://www.gregcons.com/KateBlog/CallingManagedCodeFromNativeCode.aspx

Comments

0

the simplest way is to use C++/CLI. If you can't use that in your code, write a wrapper dll and call that dll.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.