DirectInput 프로그래밍의 힌트 및 툴   [목차열람] [주소복사] [슬롯비우기]
프로그래밍의 힌트 및 툴
 
Microsoft DirectX 9.0

프로그래밍의 힌트 및 툴


이 주제에서는, 이하의 특수한 프로그래밍의 힌트를 기재한다.

이전버전의 DirectInput 용의 설계

DirectInput8Create ,IDirectInput8::Initialize ,IDirectInputDevice8::Initialize ,IDirectInputEffect::Initialize 의 각 메서드에서는, Microsoft® DirectInput® 의 버전 번호를 건네줄 필요가 있다. 이 파라미터는, DirectInput 서브 시스템이 어느 버전의 Microsoft DirectX® 를 에뮬레이트 하는지를 지정한다.

최신 버전의 DirectInput 용으로 설계된 애플리케이션은, Dinput.h 로 정의되고 있는 DIRECTINPUT_VERSION 값을 건네줄 필요가 있다.

이전의 버전으로 실행하도록(듯이) 설계된 애플리케이션에서는, 설계 대상의 DirectInput 의 버전에 대응한 값, 즉 상위 바이트에 메인 버전 번호를 매긴 값을 건네줄 필요가 있다. 예를 들어, DirectInput 3.0 상에서 동작하도록(듯이) 설계된 애플리케이션은, 0x0300 를 건네줄 필요가 있다.

Dinput.h 헤더 파일을 인클루드 하기 전에, DIRECTINPUT_VERSION 를 0x0300 로 정의 하면, 이 헤더 파일은 DirectInput 3.0 으로 호환성을 가지는 구조체 정의를 생성한다.

Dinput.h 헤더 파일을 인클루드 하기 전에 DIRECTINPUT_VERSION 를 정의하지 않으면 Dinput.h 헤더 파일은 DirectInput 의 현행 버전과 호환성이 있는 구조체 정의를 생성한다. 그러나, DirectX 3 으로 호환성이 있는 구조체도, 그 이름에 "_DX3" 를 붙이면 사용할 수 있다. 예를 들어, DirectX 3 으로 호환성이 있는 DIDEVCAPS 구조체는 DIDEVCAPS_DX3 와 같은 이름을 붙일 수 있다.

또, DirectInput 인터페이스와 DirectInputDevice 인터페이스의 적절한 버전을 사용할 필요가 있다. DirectX 7.0 보다 전의 버전의 DirectX 에서는,IDirectInputIDirectInputDevice 또는 IDirectInputDevice2 의 어느쪽이든을 사용할 필요가 있다. 후자는 DirectX 5.0 이후의 버전으로 이용 가능하다.

디버그시의 응답 지연의 방지

Microsoft Windows® 2000 상에서 실행하는 DirectInput 로 키보드 또는 마우스를 사용하는 경우, 디버그 세션중에 코드를 실행 하면, 단기간의 지연이 발생하는 경우가 있다. 이 현상은 debug 모드에서만 발생한다. 실제의 애플리케이션에서는 발생하지 않는다. 다만, Emulation 값을 다음의 레지스트리 키에 추가하는 것으로, debug 모드에서도 이 지연이 발생하지 않게 할 수 있다.

HKEY_LOCAL_MACHINE
    SOFTWARE
        Microsoft
            DirectInput
이름타입데이터
EmulationDWORD0x08 (키보드용)

0x10 (마우스용)

0x18 (마우스 및 키보드용)

차의 순서에 따라, DirectX 컨트롤 패널로부터, 열거를 사용하도록(듯이) 바꿀 수도 있다.

  1. Windows 컨트롤 패널을 연다.
  2. DirectX 컨트롤 패널을 연다. Windows XP 를 사용하고 있는 경우, DirectX 아이콘을 표시하려면 ,[클래식 표시로 전환하는] 을 클릭해야 하는 것도 있다.
  3. [DirectInput] 탭을 선택한다.
  4. [Debug Input Device Emulation] 의 [Emulate Keyboard] 및 [Emulate Mouse] 체크 박스를 온으로 한다.

이러한 값을 설정 하면, DirectInput 가 데이터를 돌려주는 방법을 변경하는 일 없이, 지연에 영향을 받지 않는 에뮬레이션 모드를 기동할 수 있다. 이러한 설정은 글로벌이며, 모든 DirectInput 클라이언트에 영향을 준다. 퍼포먼스가 향상하는 것은, 디버그 바이너리를 사용하는 경우뿐이어, 그 대상이 되는 것은 foreground의 배타 장치 액세스를 사용하는 애플리케이션뿐이다. 장치의 열거중은, Windows 키의 마스킹 등, 일부의 기능은 이용할 수 없기 때문에, 열거는 디버그의 목적에만 추천 한다.

   이전의 버전의 DirectX 를 사용중의 경우는, 올바른 디버그 동적 링크 라이브러리 (DLL)를 컴퓨터에 인스톨 하기 위해서는, SDK 인스톨시에 디버그를 지정할 필요가 있다.

중복 한 레지스트리 키의 방지

DirectInput 8.0 이후를 사용하는 애플리케이션 마다, DirectInput 는 다음의 레지스트리에 키를 생성 한다.

HKEY_CURRENT_USER
	SOFTWARE
		Microsoft
			DirectInput

이것에 의해, 독립한 하드웨어 vender (IHV)는 특정의 애플리케이션으로 독자적인 장치 맵핑을 무효로 할 수 있다. 그러나, 각 빌드는, 디버그중에 타임 스탬프와 파일 사이즈가 포함된 새로운 키를 생성한다. 레지스트리로 복수의 키가 생성되지 않게 하려면 , 바이너리값 AppldFlag 를 사용한다.

다음의 표는,AppldFlag 로 사용 가능한 값을 나타내고 있다.

1키를 생성할 경우에 타임 스탬프는 무시된다.
2키를 생성할 경우에 파일 사이즈는 무시된다.
3키를 생성할 경우에 타임 스탬프와 파일 사이즈의 양쪽 모두가 무시된다.

AppldFlag 를 3 으로 설정 하면, 파일명이 같은 애플리케이션의 모든 빌드는, 같은 키를 사용한다.

  AppldFlag 값은 테스트 컴퓨터에만 설정해, 같은 파일명으로 출시되는 2 개의 애플리케이션이 서로의 입력 컨트롤 맵핑을 방해하지 않게 할 필요가 있다.

Force Editor

Force Editor 에는, 다음과 같은 특징이 있다.

설명

Force Editor 애플리케이션을 사용하면 force feedback 이펙트를 디자인하거나 그 이펙트를 단독으로 테스트하거나 몇개의 이펙트를 조합해 테스트하거나 할 수 있다. 이펙트는, 파일에 보존해, DirectInput 애플리케이션에 로드 시킬 수가 있다.

패스

실행 가능 파일 :(SDK 루트) \Bin\Dxutils\Fedit.exe

사용자 가이드

Force Editor 에는 전용의 문서가 첨부하고 있다. Fedit.exe 를 기동해, F1 키를 누르면 on-line help를 참조할 수 있다. 다음의 파일을 더블 클릭 해, on-line help를 직접 기동할 수도 있다.

(SDK 루트) \Bin\Dxutils\Fedit.chm

GetDeviceData 와 취득되지 않은 장치

Microsoft DirectPlay® 의 디버그 버전을 사용하는 경우, 장치가 취득되지 않을 때에,IDirectInputDevice8::GetDeviceData 메서드의 동작이 이상하게 되는 일이 있다. IDirectInputDevice8::GetDeviceData 를 호출했을 때 장치가 취득되지 않은 경우, 장치 데이터 버퍼에는 랜덤 바이트가 놓여져pdwInOut 파라미터의 값은 변경되지 않는다. 그 때문에, 애플리케이션이 DPNERR_UNACQUIRED 에러 코드를 체크하지 않는 경우, 애플리케이션은, 버퍼에 데이터가 있으면 잘못하고 판단하게 된다.


© 2002 Microsoft Corporation. All rights reserved.
↑TOP