Erstellen des Beispielsteuerelements für erweiterungseinheit
Wichtig
Der Inhalt und der Beispielcode in diesem Thema sind veraltet und werden derzeit nicht unterstützt. Dies funktioniert möglicherweise nicht mit der aktuellen Toolkette für die Treiberentwicklung.
Sie können den Code in diesem Abschnitt kompilieren, um ein UVC-Erweiterungseinheitsbeispielsteuerelement zu erstellen. Wenn Sie dieses Projekt erstellen, erstellen Sie ein Microsoft ActiveX-Steuerelement, das Sie mit einer entsprechenden Anwendung verwenden können, um Eigenschaften für eine Erweiterungseinheit abzurufen und festzulegen.
Um das -Steuerelement verwenden zu können, benötigen Sie Hardware, die die spezifische Funktionalität der Erweiterungseinheit implementiert. Alternativ können Sie einen USB-Emulator verwenden.
Führen Sie die folgenden Schritte aus, um das Steuerelement zu erstellen:
Installieren Sie die folgenden Pakete:
- Microsoft Windows Server 2003 mit Service Pack 1 (SP1) Driver Development Kit (DDK)
- Microsoft DirectX 9.0 SDK Update (Februar 2005)
- Microsoft DirectX 9.0, SDK-Extras für Februar 2005
Kopieren Sie den Beispielcode aus den folgenden Themen in einzelne Dateien.
Beispielschnittstelle für UVC-Erweiterungseinheiten
Beispiel-Erweiterungseinheit-Plug-In-DLL
Beispielregistrierungseintrag für UVC-Erweiterungseinheiten
Beispielanwendung für UVC-Erweiterungseinheiten
Unterstützung von Autoupdateereignissen mit Erweiterungseinheiten
Erstellen Sie wie folgt eine Quelldatei :
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
Erstellen Sie wie folgt eine Makefile-Datei :
############################################################################# # # 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
Verwenden Sie das toolGuidgen.exe (das im Microsoft Windows SDK enthalten ist), um drei GUIDs zu erstellen:
- Verwenden Sie die erste GUID als Eigenschaftssatz-ID für Ihre Erweiterungseinheit. Ersetzen Sie die x-basierten GUID-Platzhalter durch die neue GUID in Xuproxy.h, Xusample.rgs, Xuplgin.inf und in Ihrem Erweiterungseinheitsdeskriptor auf Hardwareebene.
- Verwenden Sie die zweite GUID als IID für Ihre Erweiterungseinheit. Ersetzen Sie die y-basierten GUID-Platzhalter durch die neue GUID in Interface.idl und Xuplgin.inf.
- Verwenden Sie die dritte GUID als Klassen-GUID (clsid) für Ihre Erweiterungseinheit. Ersetzen Sie den Z-basierten GUID-Platzhalter durch die neue GUID in Xuplgin.inf, Xuproxy.h und Xusample.rgs.
Erstellen Sie Uvcxuplgn.def wie folgt:
LIBRARY uvcxuplgn EXPORTS DllGetClassObject PRIVATE DllCanUnloadNow PRIVATE DllRegisterServer PRIVATE DllUnregisterServer PRIVATE
Erstellen Sie Uvcxuplgn.cpp wie folgt:
#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); }
Erstellen Sie Stdafx.h wie folgt:
// 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)
Erstellen Sie Stdafx.cpp wie folgt:
// 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>
Erstellen Sie das Beispiel, indem Sie in der WDK-Buildumgebung aufrufen
Build -cZg
.
Weitere Informationen
Codebeispiele für UVC-Erweiterungseinheit
Beispielschnittstelle für UVC-Erweiterungseinheiten
Beispiel-Erweiterungseinheit-Plug-In-DLL
Beispielregistrierungseintrag für UVC-Erweiterungseinheiten
Beispielanwendung für UVC-Erweiterungseinheiten
Unterstützung von Autoupdateereignissen mit Erweiterungseinheiten