Аргумент char ** неприятен, есть проблема с управлением памятью. Если вы объявите аргумент как «out string», маршаллер P / Invoke попытается освободить указатель. Это вряд ли сработает, для этого требуется, чтобы строка была выделена с помощью CoTaskMemAlloc ().
Единственная другая опция, которую вы должны объявить как "out IntPtr" и выполнить маршалинг строки самостоятельно с помощью Marshal.PtrToStringAnsi (). Это сработает, за исключением непоправимой утечки памяти, если LLVMC действительно ожидает, что вы освободите указатель. Назовите это миллион раз, чтобы убедиться в этом. Есть несколько шансов, что это не произойдет, так как это сообщение об ошибке, оно может вернуть указатель на строковый литерал.
Единственный оставленный вариант - написать оболочку на языке C ++ / CLI, чтобы вы могли освободить указатель.