Freigeben über


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:

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

    Bereitstellen einer UVC-INF-Datei

  3. 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
    
  4. 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
    
  5. 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.
  6. Erstellen Sie Uvcxuplgn.def wie folgt:

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

Bereitstellen einer UVC-INF-Datei