D3DX .dll 지옥을 다루는 방법?


16

각 SDK 업데이트에는 많은 버전의 D3DX dll이 있으며 각 버전에는 고유 한 이름 ( D3DX dll 이름 목록 )이 있습니다.

종종 사람들은 버전이 누락되었습니다. 따라서 호환 가능한 버전의 DirectX가 있어도 D3D 기반 프로젝트는 컴퓨터에서 실행되지 않습니다.

설치 프로그램이 없어도 게임 (작은 여가 시간 프로젝트, 게임 잼 항목 등)을 간단한 zip 파일로 배포 할 수 있기를 원합니다. 그러나 상당수의 사용자가 D3DX .dll 오류가 발생했습니다. 그리고 설치 프로그램이 없으면 Microsoft의 공식 솔루션 (DirectX 웹 설치 프로그램 / 업데이터)은 실제로 많은 솔루션이 아닙니다.

불행히도 Microsoft는 여전히 D3DX에 정적으로 연결하는 옵션을 제공하지 않습니다 (좋은 솔루션이 될 것입니다). D3DX 사용을 피하는 것은 특히 실용적이지 않습니다. 특히 셰이더로 작업하는 경우 (그리고 적어도 지금은 OpenGL로 전환하지 않습니다)

이 DLL 지옥을 피할 수있는 영리한 솔루션이 있습니까?


2
Stack Overflow ( stackoverflow.com ) 에서 더 나은 응답을 얻을 수 있습니다 -이것이 게임에 적용되지만 실제로 프로그래밍됩니다. 그동안 ... DLL을 실행 파일과 같은 폴더에 넣을 수 없습니까?
Ricket

흠 ...이 문제를 줄이기 위해 내가 가질 수있는 가장 오래된 DX9 SDK 버전으로 되 돌리는 것이 어리석은 생각입니까? 미친 일을하는 것처럼 보이지만 MS는 실제로 성가신 문제를 일으켰습니다. 또 다른 미친 옵션은 가장 중요한 D3DX 기능을 처음부터 다시 구현하는 것이지만 효과 시스템을 재발 명하지는 않습니다 ...
bluescrn

최근 SDK에서 (작년에 생각한 바와 같이) 효과 서브 시스템은 10+ 이상의 핵심 및 D3DX SDK 에서 크게 벗어났습니다 . 실제로 직접 컴파일 할 수 있습니다. 코드는 SDK에 있으며 재배포 가능합니다 (바이너리에서 생성 된 바이너리와 동일). 9로 작업하기 위해 시스템을 백 포트하는 것이 더 쉬울 수 있으며 나머지 D3DX의 대부분은 다시 구현하거나 대안을 찾기가 매우 쉽습니다.

2
d3dx를 사용하지 마십시오. 어쨌든 빠르거나 양호 / 효율적 / 시원하지 않습니다.

DirectX 수학, 메쉬, 텍스처 및 일반적인 도우미를 전달할 수는 있지만 실제로 D3DXEffect를 포기할 수는 없습니다. 그리고 나는 DX9에 영원히 붙어 있습니다. 그리고 내가 걱정하는 한, DX10 +는 XP에 존재하지 않기 때문에 존재하지 않습니다.
bluescrn

답변:


17

안타깝게도 설치 관리자를 만드는 것 외에는 합법적 인 솔루션이 없습니다. D3DX DLL을 제공하는 DirectX SDK에 의해 부여 된 배포 권한이 귀하의 손에 달려 있기 때문입니다. 라이센스 계약 조건에 따라 SDK를 사용하여 구속력이 있습니다 ( (SDK Install Directory)/Documentation/License Agreements/사용자의 SDK는 일부 샘플 및 유틸리티 코드와 함께 SDK의 특정 서브 세트의 2 진 양식 만 재배포 할 수 있습니다).

2010 년 6 월 SDK를 기준으로 "Redist"디렉토리에있는 모든 항목을 재배포 할 수 있었으며 그렇게 할 때는 특정 구성 요소 (DSetup32.dll, DSetup.dll, DXSetup.exe, DXupdate.cab 및 dxdllreg_x86.cab)를 포함해야합니다. Redist 디렉토리에는 D3DX DLL 용 .cab 파일이 포함되어 있지만 DLL 자체는 포함 되어 있지 않으므로 운이 좋지 않습니다.

다행스럽게도 적절한 D3DX 설치 프로그램을 실행 하거나 재배포 하는 것이 아닌 설치 프로그램을 빌드하는 것은 그리 어렵지 않습니다 . 간단한 .msi 설치 관리자는 사용자가 사용하기 쉽고 (두 번 클릭 만하면됩니다.) Program Files 디렉터리를 "폴링"하는 데 문제가있는 경우 임의의 디렉터리에 설치할 수 있도록 구성 할 수 있습니다. 이 작은 버리기 프로그램. 적절하게 구성된 설치 프로그램의 다운로드 크기 오버 헤드도 매우 작을 수 있으므로 문제가되지 않습니다.

편집 : 다음은 DX 설치 관련 좋은 페이지 입니다.

편집 2 : 의견의 수정에 대한 응답으로 "웹"비트를 쳤다.


3
웹 설치 프로그램을 재배포 할 수 없으며 microsoft.com 페이지를 가리켜 야합니다 (이상적이지 않음). 재배포 가능 구성 요소는 최소 3Mb (실제 게임의 크기와 비교할 때 중요하지 않음)입니다. 약간의 여가 시간 프로젝트를 위해)
bluescrn

어, 그래, 네 말이 맞아, 나는 웹 설치 프로그램에 대해 틀렸다.

2

4 가지 주요 솔루션이 떠 오릅니다.

첫 번째는 이전 버전의 DirectX SDK를 사용하는 것입니다. Roundabout 2004 또는 그 이전 버전의 버전은 정적으로 링크되어 있음을 기억합니다 (그러나 더 큰 실행 파일 크기로 인해 옵션이 아닐 수도 있습니다) .2006 / 2007 또는 그 이전 버전을 사용하는 경우 필요한 D3DX DLL은 컴퓨터에있을 가능성이 훨씬 높습니다. 이것의 단점은 최신 SDK의 버그 수정, 성능 향상 및 개선 된 기능을 놓칠 수 있다는 것입니다 (9 이외의 모든 버전의 D3D도 제외 함).

두 번째 해결책은 D3DX 함수에서 LoadLibrary 및 GetProcAddress를 사용하는 것입니다. 지원되는 최대 및 최소 버전 (예 : _42에서 _34까지)을 선택한 다음 max에서 min까지 루프로 이동하여 DLL 이름을 구성하고 LoadLibrary를 시도하십시오. 올바로로드하면 GetProcAddress 호출을 여러 번 수행하고 원시 D3DX 함수 대신 함수 포인터를 사용합니다. 내가 말하는 것을 알고 있다면 OpenGL 확장과 같은 종류입니다. 이것은 잠재적으로 약간 털이 있으며 범위에서 DLL을 찾을 수없는 경우를 처리해야 할 수도 있습니다. 그러나 나는 이것을 과거에 사용했으며 충분히 잘 작동합니다.

세 번째 해결책은 D3DX를 사용하지 않는 것입니다. 경우에 따라 옵션 일 수도 있고, 경우에 따라 옵션이 아닐 수도 있습니다.

네 번째이자 마지막 해결 방법은 사용자에게 Direct 3D를 업그레이드하도록 지시하는 것입니다. 그들은 실제로 어쨌든이 작업을 수행해야하며 Microsoft의 작고 빠른 다운로드이며 즉각적인 문제 해결사입니다. 사용자가 그렇게하고 싶지 않을 수도 있고 "이미 D3D11을 받았는데 왜 D3D9를 업그레이드해야합니까?"와 같은 질문을 처리해야 할 수도 있지만 균형을 잡기 위해서는 전체적으로 더 경제적 일 수 있습니다. 코에.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.