LibVLC DLL ライブラリ用の必要最小限の超シンプルな軽量ラッパーを作成しようとしています。メディアファイルを再生して一時停止および停止する機能だけで、多くのアクセスは必要ありません。ドキュメントと、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);
説明は、それが配列であるべきであることを示唆しており、問題は2番目の引数だと思います。私はもう試した:
[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] String[] argv
hereによると、ここで提案されている String や StringBuilder などの他のオプションがいくつかありますが、関数を呼び出すたびに不均衡な PInvoke スタックが発生します。
この関数の適切な呼び出し規則と、おそらく他のいくつかの関数が何であるかを知る必要があります。「PInvoke For Dummies」オンライン リファレンスは非常に優れています。