It is always wise not to use a complex type of marshaling between native code and managed code. In the case of List , these types are completely different from each other, since they have a different memory structure for each element.
Thus, the best way is to write a utility function in the native dll that takes an array of strings (char *) and manually build your own List and ultimately call the desired method. It is easy to create a wrapper for this utility function.
source share