Всегда разумнее не использовать маршалинг сложных типов между собственным кодом и управляемым кодом.
В случае List
эти типы полностью отличаются друг от друга, так как имеют разную структуру памяти для каждого элемента.
Таким образом, лучший способ - написать служебную функцию в нативной dll, которая принимает массив строк (char *) и вручную создает ваш нативный List
и, в конечном счете, вызывает нужный метод. Вам легко создать оболочку этой служебной функции.