共用方式為


UVC 擴充單元的範例應用程式

重要

本主題中的內容和範例程式碼已過期且目前不受支援。 它可能無法與目前的驅動程式開發工具鏈搭配使用。

本主題包含可用來支援擴充單元的應用程式程式碼範例。

應用程式會使用 IKsTopologyInfo::CreateNodeInstance 來存取介面,後面接著呼叫 node 物件上的 QueryInterface ,以取得必要的 COM API。 如需詳細資訊,請參閱 IKsTopologyInfo

在應用程式來源中包含下列程式碼,並任意命名為 TestApp.cpp。

也包含在 TestApp.cpp 中, 支援具有擴充單位的自動更新事件中顯示的程式代碼。

  // pUnkOuter is the unknown associated with the base filter
  hr = pUnkOuter->QueryInterface(__uuidof(IKsTopologyInfo),
                               (void **) &pKsTopologyInfo);
  if (!SUCCEEDED(hr))
  {
        printf("Unable to obtain IKsTopologyInfo %x\n", hr);
 goto errExit;
  }

  hr = FindExtensionNode(pKsTopologyInfo,
     GUID_EXTENSION_UNIT_DESCRIPTOR,
     &dwExtensionNode);
  if (FAILED(hr))
  {
        printf("Unable to find extension node : %x\n", hr);
 goto errExit;
  }

  hr = pKsTopologyInfo->CreateNodeInstance(
        dwExtensionNode,
   __uuidof(IExtensionUnit),
 (void **) &pExtensionUnit);
 if (FAILED(hr))
  {
        printf("Unable to create extension node instance : %x\n", hr);
 goto errExit;
  }

  hr = pExtensionUnit->get_PropertySize(1, &ulSize);
  if (FAILED(hr))
  {
        printf("Unable to find property size : %x\n", hr);
 goto errExit;
  }

  pbPropertyValue = new BYTE[ulSize];
  if (!pbPropertyValue)
  {
      printf("Unable to allocate memory for property value\n");
      goto errExit;
  }

  hr = pExtensionUnit->get_Property(1,ulSize, pbPropertyValue);
  if (FAILED(hr))
  {
      printf("Unable to get property value\n");
      goto errExit;
  }

  // assume the property value is an integer
  ASSERT(ulSize == 4);
  printf("The value of property 1 = %d\n", *((int *)
     pbPropertyValue));

在此情況下, pUnkOuter 應該是擷取篩選的指標,代表 USB 視訊類別 (UVC) 裝置。 將擷取篩選新增至篩選圖形之後,您可以查詢 IKsTopologyInfo 介面的篩選,如下列範例程式碼所示。

撰寫 FindExtensionNode 函式的程式碼,以找出必要的擴充單元節點,並在 dwExtensionNode中傳回其識別碼。 此識別碼用於此範例程式碼的後續 IKsTopologyInfo::CreateNodeInstance 方法呼叫。