Compartir a través de


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:

  1. 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
  2. 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

    Proporcionar un archivo UVC INF

  3. 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
    
  4. 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
    
  5. 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.
  6. Cree Uvcxuplgn.def de la siguiente manera:

    LIBRARY uvcxuplgn
    
    EXPORTS
        DllGetClassObject   PRIVATE
        DllCanUnloadNow     PRIVATE
        DllRegisterServer   PRIVATE
        DllUnregisterServer PRIVATE
    
  7. 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);
    }
    
  8. 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)
    
  9. 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>
    
  10. 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

Proporcionar un archivo UVC INF