Правильное соглашение о вызовах неуправляемой функции 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.
Мне нужно знать, каково правильное соглашение о вызовах этой и, скорее всего, нескольких других функций. А "Пинвоук для чайников " онлайн справка будет супер хорошо.