Ik wil wat DirectShow-dingen doen vanuit .NET, en aangezien dat zo ongeveer het enige deel van DirectX is wat nog niet fatsoenlijk is geport, heb ik mijn toevlucht gezocht naar een 3rd party 'library' (voor zover je daarvan kan spreken): DirectShow.NET.
In het kort komt het erop neer dat alle DirectShow COM-interfaces herschreven zijn in C#, en dat je ze met interop moet benaderen.
Een van de functies van zo'n interface ziet er in C++ bijv. zo uit:
In C# wordt dezelfde functie (volgens die library dan) zo:
Nu is het probleem dat de eerste 2 parameters null mogen zijn. Maar: hoe krijg ik dit vanuit c# voor elkaar? Ik mag niet schrijven RenderStream(null, null, ...), omdat 'null' geen reference is, en RenderStream(ref null, ref null, ...) mag ook niet...
Is er een constructie waarmee ik wel null-pointers door kan geven, of moet ik de signature van de methode aanpassen?
In het kort komt het erop neer dat alle DirectShow COM-interfaces herschreven zijn in C#, en dat je ze met interop moet benaderen.
Een van de functies van zo'n interface ziet er in C++ bijv. zo uit:
C++:
1
2
3
4
5
6
7
| HRESULT RenderStream( const GUID *pCategory, const GUID *pType, IUnknown *pSource, IBaseFilter *pIntermediate, IBaseFilter *pSink ); |
In C# wordt dezelfde functie (volgens die library dan) zo:
C#:
1
2
3
4
5
6
7
| [PreserveSig] int RenderStream( [In] ref Guid pCategory, [In] ref Guid pType, [In, MarshalAs(UnmanagedType.IUnknown)] object pSource, [In] IBaseFilter pfCompressor, [In] IBaseFilter pfRenderer); |
Nu is het probleem dat de eerste 2 parameters null mogen zijn. Maar: hoe krijg ik dit vanuit c# voor elkaar? Ik mag niet schrijven RenderStream(null, null, ...), omdat 'null' geen reference is, en RenderStream(ref null, ref null, ...) mag ook niet...
Is er een constructie waarmee ik wel null-pointers door kan geven, of moet ik de signature van de methode aanpassen?