次の方法で共有


拡張ユニットのサンプル コントロールの構築

重要

このトピックのコンテンツとサンプル コードは古く、現在はサポートされていません。 現在のドライバー開発ツールチェーンでは動作しない場合があります。

このセクションのコードをコンパイルして、UVC 拡張ユニット サンプル コントロールを作成します。 このプロジェクトをビルドするときに、対応するアプリケーションで使用できる Microsoft ActiveX コントロールを作成して、拡張機能ユニットのプロパティを取得および設定します。

コントロールを使用するには、特定の拡張ユニット機能を実装するハードウェアが必要です。 または、USB エミュレーターを使用することもできます。

コントロールをビルドするには、次の手順に従います。

  1. 次のパッケージをインストールします。

    • Microsoft Windows Server 2003 Service Pack 1 (SP1) ドライバー開発キット (DDK)
    • Microsoft DirectX 9.0 SDK Update (2005 年 2 月)
    • Microsoft DirectX 9.0 (2005 年 2 月) SDK Extras
  2. 次のトピックのサンプル コードを個々のファイルにコピーします。

    UVC 拡張ユニットのサンプル インターフェイス

    サンプル拡張ユニット プラグイン DLL

    UVC 拡張ユニットのサンプル レジストリ エントリ

    UVC 拡張ユニットのサンプル アプリケーション

    拡張ユニットによる自動更新イベントのサポート

    UVC INF ファイルの提供

  3. 次のようにソース ファイルを作成します。

    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. 次のように makefile ファイルを作成します。

    #############################################################################
    #
    #       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. Guidgen.exe ツール (Microsoft Windows SDK に含まれている) を使用して、次の 3 つの GUID を作成します。

    • 拡張機能ユニットのプロパティ セット ID として最初の GUID を使用します。 x ベースの GUID プレースホルダーを、Xuproxy.h、Xusample.rgs、Xuplgin.inf、およびハードウェア レベルの拡張ユニット記述子の新しい GUID に置き換えます。
    • 拡張ユニットの IID として 2 番目の GUID を使用します。 y ベースの GUID プレースホルダーを Interface.idl および Xuplgin.inf の新しい GUID に置き換えます。
    • 拡張ユニットのクラス GUID (clsid) として 3 番目の GUID を使用します。 z ベースの GUID プレースホルダーを、Xuplgin.inf、Xuproxy.hXusample.rgs の新しい GUID に置き換えます。
  6. 次のように Uvcxuplgn.def を作成します。

    LIBRARY uvcxuplgn
    
    EXPORTS
        DllGetClassObject   PRIVATE
        DllCanUnloadNow     PRIVATE
        DllRegisterServer   PRIVATE
        DllUnregisterServer PRIVATE
    
  7. 次のように Uvcxuplgn.cpp を作成します。

    #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. 次のように Stdafx.h を作成します。

    // 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. 次のように Stdafx.cpp を作成します。

    // 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. WDK ビルド環境で呼び出して Build -cZg サンプルをビルドします。

関連項目

UVC 拡張ユニットのコード サンプル

UVC 拡張ユニットのサンプル インターフェイス

サンプル拡張ユニット プラグイン DLL

UVC 拡張ユニットのサンプル レジストリ エントリ

UVC 拡張ユニットのサンプル アプリケーション

拡張ユニットによる自動更新イベントのサポート

UVC INF ファイルの提供