2012-01-31 9 views
-1

私は隠されたウィンドウを作成していますが、IDXGISwapChain::Present()へのポインタを取得しようとしています。問題は、有効なDirect3D10デバイスや有効なスワップチェーンを取得できないことです。D3D10CreateDeviceAndSwapChain()は常にDXGI_ERROR_INVALID_CALLで失敗します

HWND hwnd = CreateWindow(TEXT("flhiSTATIC"), TEXT("flh DXGI Window"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, 0, NULL, NULL, 0); 
DXGI_SWAP_CHAIN_DESC scd; 
ZeroMemory(&scd, sizeof(scd)); 

scd.BufferCount = 2; 
RECT rcWnd; 
GetClientRect(hwnd, &rcWnd); 

scd.BufferDesc.Width = rcWnd.right - rcWnd.left; 
scd.BufferDesc.Height = rcWnd.bottom - rcWnd.top; 
scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; // also tried DXGI_FORMAT_R8G8B8A8_UNORM_SRGB 
scd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; 
scd.BufferDesc.Scaling = DXGI_MODE_SCALING_CENTERED; 
scd.BufferDesc.RefreshRate.Numerator = 60; 
scd.BufferDesc.RefreshRate.Denominator = 1; 
scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; 
scd.OutputWindow = hwnd; 
scd.SampleDesc.Count = 1; 
scd.SampleDesc.Quality = 0; 
scd.Windowed = TRUE; 
scd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; 

pD3D10CreateDeviceAndSwapChain = reinterpret_cast<D3D10CREATEDEVICEANDSWAPCHAIN_PROC *>(GetProcAddress(d3d10, "D3D10CreateDeviceAndSwapChain")); 

HRESULT hr = pD3D10CreateDeviceAndSwapChain(NULL /*pAdapter*/, D3D10_DRIVER_TYPE_HARDWARE, NULL, D3D10_CREATE_DEVICE_DEBUG, D3D10_SDK_VERSION, &scd, &pSwapChain, &pDev); 
// this guy always fails with 0 in both pSwapChain and pDev... 

上記のコードには何が問題なのでしょうか?

+0

問題は私のウィンドウクラスの登録に失敗したと思います。私は現在この問題を調査中です。 – foxx1337

+0

'' CreateWindow''がゼロ以外の値を返すことを検証する必要があります。 –

答えて

-1

私は完全に既存のウィンドウクラスを作成または割り当てる必要:(

問題だった忘れてしまった、レッスンが学んだ - 常にすべてのコールのリターンコードをチェックし

編集。

は、私は完全に、有効ウィンドウクラスでCreateWindowを呼び出すために内誰かによって登録されます、私は以前に登録したい1または1のどちらかを忘れてしまいました現在のモジュール。

+0

"既存のウィンドウクラスをどのように割り当てる"のですか?おそらくあなたの答えをより明確にすることができますか? –

+0

@samhocevar - 私は、ウィンドウクラス 'flhiSTATIC'が登録されている場所を簡潔にするのではなく、単純にそのようなウィンドウクラスを登録しないために貼り付けませんでした。 'CreateWindow'呼び出しは失敗します。私は自分自身を作成するか、コードの他の部分から別の手段(私が貼り付けたこのコードは実際に別のプロセスに注入される)を "魚"にするために、有効なクラスを受け取る必要があります。 – foxx1337

関連する問題