Creación del control de ejemplo de unidad de extensión
Importante
El contenido y el código de ejemplo de este tema están obsoletos y no se admiten actualmente. Es posible que no funcione con la cadena de herramientas de desarrollo de controladores actual.
Puede compilar el código de esta sección para crear un control de ejemplo de unidad de extensión UVC. Al compilar este proyecto, se crea un control Microsoft ActiveX que se puede usar con una aplicación correspondiente para obtener y establecer propiedades en una unidad de extensión.
Para usar el control, necesita hardware que implemente la funcionalidad de unidad de extensión específica. Como alternativa, puede usar un emulador USB.
Siga estos pasos para compilar el control:
Instale los siguientes paquetes:
- Microsoft Windows Server 2003 con el Kit de desarrollo de controladores de Service Pack 1 (SP1) (DDK)
- Actualización del SDK de Microsoft DirectX 9.0 (febrero de 2005)
- Extras del SDK de Microsoft DirectX 9.0 de febrero de 2005
Copie el código de ejemplo de los temas siguientes en archivos individuales.
Interfaz de ejemplo para unidades de extensión UVC
Archivo DLL de complemento de unidad de extensión de ejemplo
Entrada del Registro de ejemplo para unidades de extensión UVC
Aplicación de ejemplo para unidades de extensión UVC
Compatibilidad con eventos de actualización automática con unidades de extensión
Cree un archivo de orígenes de la siguiente manera:
TARGETNAME= uvcxuplgn TARGETTYPE= DYNLINK TARGETPATH= obj TARGETEXT= ax DLLENTRY=_DllMainCRTStartup DLLBASE=0x10080000 USE_MSVCRT=1 USE_STATIC_ATL=1 USER_INCLUDES= $(O) INCLUDES= SOURCES= interface.idl \ uvcxuplgn.cpp \ stdafx.cpp \ interface_i.c \ vidcap_i.c \ xuproxy.cpp TARGETLIBS= \ $(SDK_LIB_PATH)\kernel32.lib \ $(SDK_LIB_PATH)\user32.lib \ $(SDK_LIB_PATH)\gdi32.lib \ $(SDK_LIB_PATH)\advapi32.lib \ $(SDK_LIB_PATH)\comdlg32.lib \ $(SDK_LIB_PATH)\ole32.lib \ $(SDK_LIB_PATH)\oleaut32.lib \ $(SDK_LIB_PATH)\uuid.lib \ $(SDK_LIB_PATH)\comctl32.lib
Cree un archivo makefile como se indica a continuación:
############################################################################# # # Copyright (C) Microsoft Corporation 1995 # All Rights Reserved. # # MAKEFILE for WDM device driver kit # ############################################################################# # # DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source # file to this component. This file merely indirects to the real make file # that is shared by all the driver components of the Windows NT DDK # !if "$(WIN2K_DDKBUILD)" == "" !INCLUDE $(NTMAKEENV)\makefile.def !endif
Use la herramienta Guidgen.exe (que se incluye en el Microsoft Windows SDK) para crear tres GUID:
- Use el primer GUID como identificador de conjunto de propiedades para la unidad de extensión. Reemplace los marcadores de posición guid basados en x por el nuevo GUID en Xuproxy.h, Xusample.rgs,Xuplgin.inf y en el descriptor de unidad de extensión en el nivel de hardware.
- Use el segundo GUID como IID para la unidad de extensión. Reemplace los marcadores de posición guid basados en y por el nuevo GUID en Interface.idl y Xuplgin.inf.
- Use el tercer GUID como GUID de clase (clsid) para la unidad de extensión. Reemplace el marcador de posición guid basado en z por el nuevo GUID en Xuplgin.inf, Xuproxy.h y Xusample.rgs.
Cree Uvcxuplgn.def de la siguiente manera:
LIBRARY uvcxuplgn EXPORTS DllGetClassObject PRIVATE DllCanUnloadNow PRIVATE DllRegisterServer PRIVATE DllUnregisterServer PRIVATE
Cree Uvcxuplgn.cpp de la siguiente manera:
#include "stdafx.h" CComModule _Module; #include <initguid.h> #include "interface.h" #include "xuproxy.h" BEGIN_OBJECT_MAP(ObjectMap) OBJECT_ENTRY(CLSID_ExtensionUnit, CExtension) END_OBJECT_MAP() STDAPI DllRegisterServer(void) { return _Module.RegisterServer(FALSE, NULL); } STDAPI DllUnregisterServer(void) { return _Module.UnregisterServer(); } EXTERN_C BOOL DllMain( HINSTANCE hinst, DWORD dwReason, LPVOID lpReserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: _Module.Init (ObjectMap, hinst); break; case DLL_PROCESS_DETACH: _Module.Term(); break; } return TRUE; } extern "C" STDMETHODIMP DllCanUnloadNow(void) { return _Module.GetLockCount()==0 ? S_OK : S_FALSE; } extern "C" STDAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, LPVOID *ppv) { return _Module.GetClassObject(rclsid, riid, ppv); }
Cree Stdafx.h de la siguiente manera:
// stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, // but are changed infrequently #if !defined(AFX_STDAFX_H__722DC775_FE6F_42FB_BED5_E1E299976D17__INCLUDED_) #define AFX_STDAFX_H__722DC775_FE6F_42FB_BED5_E1E299976D17__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #define STRICT #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0400 #endif #define _ATL_APARTMENT_THREADED #include <atlbase.h> //You may derive a class from CComModule and use it if you want to override //something, but do not change the name of _Module extern CComModule _Module; #include <atlcom.h> #include <atlctl.h> //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_STDAFX_H__722DC775_FE6F_42FB_BED5_E1E299976D17__INCLUDED)
Cree Stdafx.cpp de la siguiente manera:
// stdafx.cpp : source file that includes just the standard includes // stdafx.pch will be the pre-compiled header // stdafx.obj will contain the pre-compiled type information #include "stdafx.h" #ifdef _ATL_STATIC_REGISTRY #include <statreg.h> #include <statreg.cpp> #endif #include <atlimpl.cpp>
Compile el ejemplo invocando
Build -cZg
en el entorno de compilación de WDK.
Consulte también
Ejemplos de código de unidad de extensión UVC
Interfaz de ejemplo para unidades de extensión UVC
Archivo DLL de complemento de unidad de extensión de ejemplo
Entrada del Registro de ejemplo para unidades de extensión UVC
Aplicación de ejemplo para unidades de extensión UVC
Compatibilidad con eventos de actualización automática con unidades de extensión