Правильное соглашение о вызовах неуправляемой функции DLL

Я пытаюсь написать простейшую, простую, легкую оболочку для библиотеки DLL LibVLC. Я неМногим не нужен доступ, только возможность проигрывать паузы и останавливать медиафайлы. Я'я смотрю на документацию и эту другую ссылку, которую я нашел, которая объясняет более старую версию LibVLC, но это 'устарел для самой последней версии. Я также пробовал LibVLC.Net, но он тоже устарел, и я могуне могу найти то, что яищу в исходном коде, чтобы сопоставить его с функциями, которые яЯ пытаюсь экспортировать.

У меня есть следующая подпись, ям пытаюсь экспортировать:

libvlc_new (int argc, const char *const *argv)

Описание:

argc    the number of arguments (should be 0)
argv    list of arguments (should be NULL)

И это метод, который яЯ пытаюсь

[DllImport("libvlc", EntryPoint = "libvlc_new")]
public static extern IntPtr New(Int32 argc, String[] argv);

Описание предполагает, что это должен быть массив, и я думаю, что проблема - второй аргумент. Я'мы пробовали:

[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] String[] argv

согласноВоти есть несколько других опций, таких как String и StringBuilder, как предложеноВот но все равно бывает, что каждый раз, когда я вызываю функцию, я получаю несбалансированный стек PInvoke.

Мне нужно знать, каково правильное соглашение о вызовах этой и, скорее всего, нескольких других функций. А "Пинвоук для чайников " онлайн справка будет супер хорошо.

Ответы на вопрос(1)

Ваш ответ на вопрос