簡體   English   中英

C ++在Windows Vista OS上驗證DirectX的版本

[英]C++ verifying the version of directx on Windows Vista OS

我想在不同的OS,Windows Vista,Windows Vista SP1,Windows Vista SP2,Windows 2012R2,Windows 7,Windows 8,Windows 10和其他操作系統上進行測試,是否有可能使用Direct3D 11 Graphics技術。

msdn上的某個地方發現,確保OS可以使用該技術的最佳方法是調用D3D11CreateDevice並檢查結果。

如果您在沒有Service Pack的Windows Vista上運行此代碼,則由於沒有d3d11.dll,它甚至無法啟動。 原來,要檢查是否支持Direct3D 11 Graphics技術,您需要相同的技術嗎?

#include "stdafx.h"
#include "windows.h"
#include "dxgi.h"
#include "d3d11.h"

BOOL IsDirectx11Available()
{
    D3D_FEATURE_LEVEL lvl[] = {
        D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL_11_0,
        D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0,
        D3D_FEATURE_LEVEL_9_3, D3D_FEATURE_LEVEL_9_2, D3D_FEATURE_LEVEL_9_1 };

    DWORD createDeviceFlags = 0;

    ID3D11Device *device;
    ID3D11DeviceContext *context;
    D3D_FEATURE_LEVEL fl;

    HRESULT hr = D3D11CreateDevice(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr,
        createDeviceFlags, lvl, _countof(lvl),
        D3D11_SDK_VERSION, &device, &fl, &context);

    if (hr == E_INVALIDARG)
    {
    hr = D3D11CreateDevice(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr,
        createDeviceFlags, &lvl[1], _countof(lvl) - 1,
        D3D11_SDK_VERSION, &device, &fl, &context);

    return false;
}

return true;
}
int main()
{
if (IsDirectx11Available())
{
    printf("Directx api available\n");
}

system("PAUSE");
return 0;
}

也嘗試過

DWORD dwVersion;
DWORD dwRevision;
if (DirectXSetupGetVersion(&dwVersion, &dwRevision))
{
    printf("DirectX version is %d.%d.%d.%d\n",
           HIWORD(dwVersion), LOWORD(dwVersion),
           HIWORD(dwRevision), LOWORD(dwRevision));
}

使用dsetup.h,directx sdk中的dsetup.lib。 但是當我朗讀.exe它顯示未找到dsetup.dll的通知。

如何擺脫這種情況並檢查Windows Vista上的可用性?

您列出的每個操作系統都有僅基於操作系統編號的特定DirectX版本。 除了兩個特定的更新之外,您無法更改系統上的DirectX版本,因此在大多數情況下無需“檢測”。 在任何這些操作系統上,運行DirectX最終用戶運行時都不會更改DirectX版本。

Windows XP SP2     |     DirectX 9.0c
Windows XP SP3     |     DirectX 9.0c
Windows Vista RTM  |     DirectX 10.0
Windows Vista SP1  |     DirectX 10.1
Windows Vista SP2  |     DirectX 10.1 or DirectX 11.0 (KB 971644)
Windows 7 RTM      |     DirectX 11.0
Windows 7 SP1      |     DirectX 11.0 or DirectX 11.1 (KB 2670838)
Windows 8          |     DirectX 11.1
Windows 8.1        |     DirectX 11.2
Windows 10         |     DirectX 12 (build number will determine specifics)

從Windows Server 2003 SP1開始,等效的Server OS是相同的(並且具有相同的版本號)。

請記住,這僅告訴您存在哪些OS軟件API。 您必須嘗試創建Direct3D設備並檢測它的Direct3D硬件功能級別,才能了解有關系統中連接的視頻卡/驅動程序的任何信息。 請參見Direct3D功能級別

要解決在未更新的Windows Vista系統上缺少d3d11.dll的問題,您需要使用顯式DLL鏈接(又名LoadLibrary )或DLL延遲加載

dsetup.dll僅在舊版DirectX SDK中,並且是不建議使用的DirectX最終用戶運行時程序包中並行內容的一部分。 這就是為什么它不存在於所有計算機上的原因。 參見MSDN 遺留DirectSetup API從來沒有更新的DirectX 10或更高版本,所以它仍然報告說,它總是做同樣的9.0C號。

請參閱以下博客文章: 不是直接安裝版本號是多少? 清單瘋狂

一些腳注:

  • 從Windows Vista RTM或更高版本開始,沒有更高版本的Direct3D保留模式,DirectPlay語音或DX7 / DX8 Visual Basic支持作為更高版本的運行時中包含的“ DirectX 9.0c”組件的一部分。

  • 從Windows 8.1或更高版本開始,默認情況下未安裝DirectPlay。 這是必須啟用的Windows可選功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM