as stated in the title, I want to have my old C++ library working in managed .NET. I think of two possibilities:
1) I might try to compile the library with /clr and
If you have a lot of unmanaged functions to wrap, you should consider using SWIG. It writes all the wrapper and interop code for you, and has pre-written SWIG interface files that support std::vector, std::string, windows types, etc.
I have a full example exposing unmanaged C++ DLL functions if you are interested.
The way I do it is
Create a normal unmanaged .lib. Make sure that you link to the standard runtime as a DLL (required if the .lib is in an assembly)
Create a C++/CLI assembly.
Add the .lib to the link like of the assembly
Create a managed interface
Minimize the granularity of calls across managed/unmanaged. Meaning, prefer getting big chunks of data (like a datastructure) rather than use an interface to an unmanaged data-structure from the managed side. This is because calls across the boundary are slow.
Things like a std::vector need to be hand-wrapped in System.Collections -- but, "it just works" is good for built-in types and even function pointers.
Other gotchas. Callbacks need to be stdcall to be turned into a delegate, and delgates sent to unmanaged callbacks do not hold a reference (so, arrange to hold a reference somewhere else or crash when the object is GC'd).
First of all, forget about Managed C++. Use C++/CLI.
The difference is that Managed C++ was Microsoft's first attempt at extending C++ to work with .NET, and honestly, it was all kinds of horrible.
So they gave up on that, and designed C++/CLI instead, which works much better.
Second, valid C++ code should just work if you compile it as C++/CLI, so that does seem like the obvious way to do it.
Of course, in order to expose your C++ types to .NET assemblies, you're going to have to write some wrappers either way. For STL types, you might look into Microsoft's STL/CLR library.
But in general, just add the /cli switch, compile your code as C++/CLI, and then add what wrappers you need. There's no reason why your code would magically become slower or anything.