title: C++ and C# interoperability : P/Invoke vs C++/CLI
body: <p>In the course of finding a way to interoperate between C# and C++ I found this <a href="http://msdn.microsoft.com/en-us/magazine/cc164123.aspx" rel="noreferrer">article</a> that explains about P/Invoke. </p>
  
  <p>And I read a lot of articles claiming that C++/CLI is not exact C++ and requires some effort to modify from original C++ code.</p>
  
  <p>I want to ask what would be the optimal way when I have some C++ objects (code/data) that I want to use from C# objects. </p>
  
  <ul>
  <li>It looks like that in order to use P/Invoke, I should provide C style API. Is it true? I mean, is there a way to export C++ object to C# like SWIG with P/Invoke? Or, do I have to use SWIG for this purpose?</li>
  <li>How hard is it to change C++ to C++/CLI? Is it worth trying compared to rewrite the C++ to C#? The C++ is well designed, so implementing it to C# is not great deal.</li>
  <li>(Off the topic question) Is there the other way round? I mean, if I want to use C# code from C++, is there any way to do so?</li>
  </ul>