Итак, я смотрел этот примерный код для DirectShow.Net, в частности, их пример PlayCap в примере папки Capture. Вы можете скачать образцы here Его в C#. Он делает некоторые интересные вещи с приведением объектов к интерфейсам. Когда я попытался воссоздать его добросовестно в F #, объекты не будут отображаться должным образом.Проблемы с DirectShow.Net в F #
C#:
IVideoWindow videoWindow = null;
IMediaControl mediaControl = null;
IMediaEventEx mediaEventEx = null;
IGraphBuilder graphBuilder = null;
ICaptureGraphBuilder2 captureGraphBuilder = null;
и затем в GetInterfaces()
:
this.graphBuilder = (IGraphBuilder) new FilterGraph();
this.captureGraphBuilder = (ICaptureGraphBuilder2) new CaptureGraphBuilder2();
this.mediaControl = (IMediaControl) this.graphBuilder;
this.videoWindow = (IVideoWindow) this.graphBuilder;
this.mediaEventEx = (IMediaEventEx) this.graphBuilder;
Так что я сделал для моего кода было это в F #:
let mutable videoWindow: IVideoWindow = null;
let mutable mediaControl: IMediaControl = null;
let mutable mediaEventEx: IMediaEventEx = null;
let mutable graphBuilder: IGraphBuilder = null;
let mutable captureGraphBuilder: ICaptureGraphBuilder2 = null;
И позже в GetInterfaces()
graphBuilder <- new FilterGraph() :> IGraphBuilder
captureGraphBuilder <- new CaptureGraphBuilder2() :> ICaptureGraphBuilder2
mediaControl <- graphBuilder :> IMediaControl;
videoWindow <- graphBuilder :> IVideoWindow;
mediaEventEx <- graphBuilder :> IMediaEventEx;
Это было похоже на верный отдых. Даже не используя функциональный стиль. Я смотрел на msdn на кастинг в F #, чтобы посмотреть, правильно ли я делаю это. Похоже, что я, хотя у них есть 1 пример, и он невероятно минимальный по своей природе.
Проблема в том, я получаю ошибку:
Type constraint mismatch. The type
'FilterGraph'
is not compatible with the type'IGraphBuilder'
я получаю подобную ошибку для каждого из них. Я тоже опробовал downcasting, используя :?>
Возможно, это Q [C# и F # литья - в частности, «как» ключевое слово] (http://stackoverflow.com/questions/2361851/c-sharp- и-f-casting-specific-the-as-keyword) имеет соответствующие ответы, так как вас интересует «COM-кастинг» через вызов COM 'QueryInterface'. –