Yes, you need to create a wrapper with C ++ / CLI around your managed assembly.
To mix your own and managed types, you can check this article for sample codes.
Primitive types with int, float, byte are converted for you. But other String types must execute themselves. For example, if you have your own pointer to char *, then your C ++ / CLI class will need to convert it to String in order to pass it to the Managed C # assembly.
source
share