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.