The *only* real point in using managed c++ is either
1) to migrate legacy code to managed code
2) for managed code to interact with unmanaged code with the best possible
performance.
It sounds like your aim is (2).
Basically, if you need to use unamanaged code in your managed application,
for reasons of security and/or speed, then write that unmanaged code in
unmanaged C/C++, and *then*, after having tested it, write as thin a wrapper
as possible round it in managed c++. This should be minimalistic, non-logic
containing code, the minimum that is required to interface between C# and
the unmanaged functions. You can have a DLL that has some .cpp /.c files
compiled with /clr, and some .cpp files that are compiled without /clr. The
ones compiled without /clr have no concept of what managed code is, yet as
far as the C# side is concerned, it's a normal, managed, .NET class library.
No PInvoke or COM required.