Partager via


Génération du contrôle d’exemple d’unité d’extension

Important

Le contenu et l’exemple de code de cette rubrique sont obsolètes et actuellement non pris en charge. Il peut ne pas fonctionner avec la chaîne d’outils de développement de pilote actuelle.

Vous pouvez compiler le code de cette section pour créer un exemple de contrôle d’unité d’extension UVC. Lorsque vous générez ce projet, vous créez un contrôle Microsoft ActiveX que vous pouvez utiliser avec une application correspondante pour obtenir et définir des propriétés sur une unité d’extension.

Pour utiliser le contrôle, vous avez besoin de matériel qui implémente la fonctionnalité d’unité d’extension spécifique. Vous pouvez également utiliser un émulateur USB.

Pour générer le contrôle, procédez comme suit :

  1. Installez les packages suivants :

    • Microsoft Windows Server 2003 avec Service Pack 1 (SP1) Driver Development Kit (DDK)
    • Mise à jour du SDK Microsoft DirectX 9.0 (février 2005)
    • Microsoft DirectX 9.0 Février 2005 SDK Extras
  2. Copiez l’exemple de code des rubriques suivantes dans des fichiers individuels.

    Exemple d’interface pour les unités d’extension UVC

    Exemple de DLL de plug-in d’unité d’extension

    Exemple d’entrée de Registre pour les unités d’extension UVC

    Exemple d’application pour les unités d’extension UVC

    Prise en charge des événements de mise à jour automatique avec des unités d’extension

    Fourniture d’un fichier INF UVC

  3. Créez un fichier source comme suit :

    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. Créez un fichier makefile comme suit :

    #############################################################################
    #
    #       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. Utilisez l’outil Guidgen.exe (qui est inclus dans le Microsoft Windows SDK) pour créer trois GUID :

    • Utilisez le premier GUID comme ID de jeu de propriétés pour votre unité d’extension. Remplacez les espaces réservés GUID basés sur x par le nouveau GUID dans Xuproxy.h, Xusample.rgs,Xuplgin.inf et dans votre descripteur d’unité d’extension au niveau matériel.
    • Utilisez le deuxième GUID comme IID pour votre unité d’extension. Remplacez les espaces réservés GUID basés sur y par le nouveau GUID dans Interface.idl et Xuplgin.inf.
    • Utilisez le troisième GUID comme GUID de classe (clsid) pour votre unité d’extension. Remplacez l’espace réservé GUID basé sur z par le nouveau GUID dans Xuplgin.inf, Xuproxy.h et Xusample.rgs.
  6. Créez Uvcxuplgn.def comme suit :

    LIBRARY uvcxuplgn
    
    EXPORTS
        DllGetClassObject   PRIVATE
        DllCanUnloadNow     PRIVATE
        DllRegisterServer   PRIVATE
        DllUnregisterServer PRIVATE
    
  7. Créez Uvcxuplgn.cpp comme suit :

    #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. Créez Stdafx.h comme suit :

    // 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. Créez Stdafx.cpp comme suit :

    // 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. Générez l’exemple en appelant Build -cZg dans l’environnement de build WDK.

Voir aussi

Exemples de code d’unité d’extension UVC

Exemple d’interface pour les unités d’extension UVC

Exemple de DLL de plug-in d’unité d’extension

Exemple d’entrée de Registre pour les unités d’extension UVC

Exemple d’application pour les unités d’extension UVC

Prise en charge des événements de mise à jour automatique avec des unités d’extension

Fourniture d’un fichier INF UVC