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 :
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
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
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
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
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.
Créez Uvcxuplgn.def comme suit :
LIBRARY uvcxuplgn EXPORTS DllGetClassObject PRIVATE DllCanUnloadNow PRIVATE DllRegisterServer PRIVATE DllUnregisterServer PRIVATE
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); }
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)
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>
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