Właściwa konwencja wywoływania niezarządzanej funkcji DLL

Próbuję napisać ultra-prostą lekką, prostą owijkę do biblioteki DLL LibVLC. Nie potrzebuję wiele, tylko możliwość odtwarzania pauzy i zatrzymywania plików multimedialnych. Patrzę na dokumentację i ten inny link, który znalazłem, który wyjaśnia starszą wersję LibVLC, ale jest przestarzały dla najnowszej wersji. Wypróbowałem też LibVLC.Net, ale też jest przestarzały i nie mogę znaleźć tego, czego szukam w kodzie źródłowym, aby dopasować go do funkcji, które próbuję wyeksportować.

Mam następujący podpis, który próbuję wyeksportować:

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

Opis:

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

I to jest metoda, którą próbuję.

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

Opis sugeruje, że powinien być tablicą i myślę, że problem jest drugim argumentem. Próbowałem:

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

zgodnie ztutaji istnieje kilka innych opcji, takich jak String i StringBuilder, jak sugerowanotutaj ale nadal zdarza się, że za każdym razem, gdy dzwonię do funkcji, otrzymuję stos Niezrównoważonego Pwnw.

Muszę wiedzieć, jaka jest właściwa konwencja wywoływania tego i bardzo prawdopodobne kilka innych funkcji. Odnośnik online „PInvoke For Dummies” byłby bardzo dobry.

questionAnswers(1)

yourAnswerToTheQuestion