كيف تحصل على لقب الجهاز مع معرف الفصل المعروف؟

StackOverflow https://stackoverflow.com/questions/2351872

  •  23-09-2019
  •  | 
  •  

سؤال

أنا أستخدم directshowlib وهو غلاف رفيع لـ DirectShow. لقد نجحت في تعداد أجهزة BDA وجمعت CLSIDs الخاصة بها. الآن عندما يقوم المستخدم بتحديد جهاز حسب الاسم وأعرف clsid المختار ، أحتاج إلى إضافة هذا الجهاز إلى الرسم البياني للمرشح الخاص بي.

فعلت ما يلي:

Type type = Type.GetTypeFromCLSID(classid);
object device = Activator.CreateInstance(type);

الآن السؤال هو - ما نوع الكائن الذي حصلت عليه هنا في الجهاز؟ يوضح مصحح الأخطاء أنه كائن COM صالح. إذا حاولت إلقاءها على IbaseFilter ، أحصل على استثناء "لا توجد واجهة مدعومة مثل هذه". يمكنني إلقاءها على imoniker بنجاح. ولكن بعد ذلك إذا حاولت القيام بما يلي:

int hr = graphBuilder.AddSourceFilterForMoniker(
    device, null, filtername, out receivedFilter);

أحصل على خطأ:

HRESULT: 0x800401e4 (2147746276)
Name: MK_E_SYNTAX

أعلم أن هذه الطريقة ADDSORCEFILTERFORMONIKER تعمل بشكل جيد إذا استخدمتها مباشرة بعد التعداد ، لذلك يبدو أنني لا أقوم بإنشاء اللقب بشكل صحيح.

ما هي الطريقة الصحيحة لإنشاء كائن لقب إذا كان معرف الفئة معروفًا ، حتى أتمكن من تمريره إلى AddSourceFilterformoniker؟

هل كانت مفيدة؟

المحلول

مجرد تخمين ، ولكن يبدو أنك لا تنشئ ibindctx التنفيذ. جميع العمليات التي تنطوي Imoniker ما رأيته يتطلب تمرير تطبيق IBINDCTX من أجل توفير سياق للعمليات التي تنطوي على اللقب.

أن يقال ، AddSourceFilterformoniker الطريقة لا تختلف ، حيث أنك لا تمر سياق ربط للقبى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top