Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Belangrijk
De inhoud en voorbeeldcode in dit onderwerp zijn verouderd en worden momenteel niet ondersteund. Het werkt mogelijk niet met de huidige hulpprogrammaketen voor het ontwikkelen van stuurprogramma's.
Dit onderwerp bevat voorbeeldtoepassingscode die u kunt gebruiken om extensie-eenheden te ondersteunen.
Een toepassing opent de interface met behulp van IKsTopologyInfo::CreateNodeInstance gevolgd door een aanroep naar QueryInterface op het knooppuntobject om de vereiste COM-API te verkrijgen. Zie IKsTopologyInfo voor meer informatie.
Neem de volgende code op in de toepassingsbron, willekeurig benoemd TestApp.cpp.
Neem ook op in TestApp.cpp de code die wordt weergegeven in Ondersteunende AutoUpdate-gebeurtenissen met extensie-eenheden.
// 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));
In dit geval moet pUnkOuter een aanwijzer zijn naar het opnamefilter dat het UVC-apparaat (USB Video Class) vertegenwoordigt. Nadat u het opnamefilter aan de filtergrafiek hebt toegevoegd, kunt u een query uitvoeren op het filter voor de interface IKsTopologyInfo , zoals wordt weergegeven in deze voorbeeldcode.
Schrijf de code voor de functie FindExtensionNode om het benodigde extensie-eenheidsknooppunt te vinden en de id ervan in dwExtensionNode te retourneren. Deze id wordt gebruikt in de volgende aanroep van de IKsTopologyInfo::CreateNodeInstance-methode van deze voorbeeldcode.