Calling C# from C++, Reverse P/Invoke, Mixed Mode DLLs and C++/CLI

ng5000 picture ng5000 · Jul 1, 2009 · Viewed 12.9k times · Source

As I understand it I can use reverse P/Invoke to call C# from C++. Reverse P/Invoke is simply a case of:

  1. Create you managed (c#) class.
  2. Create a c++/cli (formerly managed c++) class library project. Use this to call the managed c# class (presumably via a reference).
  3. Call the c++/cli code from native c++.

Questions:

  1. Is this correct?
  2. Is the DLL created at step 2 known as a mixed mode DLL?
  3. Has C++/CLI completely superseded Managed C++ as far as MS are concerned?
  4. Is COM completely avoided using this approach?
  5. At what point would the CLR be created and run, and by whom?

Thanks in advance

Answer

Aamir picture Aamir · Jul 1, 2009

Here are the answers to the best of my knowledge:

  1. Yes
  2. Yes, it is a mixed mode DLL (In fact, you can make one file of your native C++ project managed and create this C++/CLI class in that file and call the code directly from that file. You don't even need a separate DLL to accomplish this.
  3. C++/CLI and Managed C++ both represent same thing. The only difference is that in the older version till Visual Studio 2003, it was termed as Managed C++. Later on, the syntax was changed quite a lot and it was renamed as C++/CLI. Have a look at this link for details.
  4. Yes
  5. CLR will be used whenever a call to the managed DLL is made.