Могу ли я сделать свой частный фильтр DirectShow обнаруживаемым Moniker внешними программами? - PullRequest
1 голос
/ 01 декабря 2011

Это длинный выстрел, но если бы я мог это сделать, это сэкономило бы мне время и нервы.У меня есть видеофильтр DirectShow, который является типичной внешней библиотекой DLL (AX-файл), которая передает видео в Skype.Я уже знаю, как использовать фильтр в частном порядке.Тем не менее, я не знаю, возможно ли создать закрытый фильтр, который встроен в EXE-файл и не является внешней DLL, доступной для обнаружения внешними программами.Насколько я знаю, основной способ сделать фильтры DirectShow видимыми - это зарегистрировать их в реестре в качестве элемента управления ActiveX / COM и с помощью частного фильтра. Я думаю, что это невозможно, поскольку для DLL нет внешней DLL.внешняя программа для загрузки.

Итак, есть ли умный способ отточить систему обнаружения DirectShow, чтобы внешняя программа, которая знает, как получить доступ к фильтрам DirectShow только через их «дружественное имя» через перечисление, могла использовать ее?Если нет, я буду просто отправлять данные назад и вперед между моим основным приложением и внешней версией моего видеофильтра, но я бы действительно предпочел бы не делать этого.

1 Ответ

2 голосов
/ 01 декабря 2011

Если внешнее приложение будет использовать ваш фильтр, ему нужно будет создать его экземпляр, загрузив вашу DLL с помощью сборщика и создав оттуда экземпляр.Если вы поместите свой фильтр в .EXE, вы все равно сможете зарегистрировать его в списке подходящих, но это не сработает: внешнее приложение просто не сможет создать экземпляр вашего фильтра.

Так что еслиВы хотите, чтобы внешние приложения использовали ваш фильтр, вам нужно поместить его в DLL.Обратите внимание, что если вы поместите свой фильтр в DLL, вам не нужно будет также регистрировать его в DirectShow: вы можете предпочесть НЕ регистрировать его и создавать экземпляры в частном порядке, в этом случае он сможет работать в вашем приложении и вв то же время вы оставляете возможность полностью зарегистрировать его через некоторое время и сделать его доступным для внешних приложений.

Если вы хотите, чтобы фильтр запускался во внешней программе и каким-то образом общался с вашим приложением, это также может бытьсделано, но вы несете полную ответственность за всю межпроцессную коммуникацию, которая будет иметь место (то есть вам нужно будет ее реализовать).

...