Danke erst mal für den Code.
Mein Problem ist
nicht das erstellen der IDirect3DDevice9-Instanz das funktioniert mit gleichen Code unter 32Bit.
Aber nicht unter 64Bit.
Delphi-Quellcode:
function BuildDirect3d(_hMediaWindow: HWND; var m_pD3DDevice: IDirect3DDevice9; var ErrStr: string): BOOL;
var
hr: HRESULT;
m_pD3DDirect3d: IDirect3D9;
d3ddm: D3DDISPLAYMODE;
d3dpp: D3DPRESENT_PARAMETERS;
begin
result := false;
ErrStr := 'No Error';
m_pD3DDirect3d := Direct3DCreate9(D3D_SDK_VERSION);
if (m_pD3DDirect3d = nil) then
begin
ErrStr := ReportError('Cannot initialize Direct3D', E_FAIL);
exit;
end;
hr := m_pD3DDirect3d.GetAdapterDisplayMode(D3DADAPTER_DEFAULT, d3ddm);
if (FAILED(hr)) then
begin
ErrStr := ReportError('Cannot get display adaptater infos from Direct3d', hr);
exit;
end;
FillChar(d3dpp, sizeof(d3dpp), 0);
d3dpp.Windowed := TRUE;
d3dpp.SwapEffect := D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat := d3ddm.Format;
d3dpp.hDeviceWindow := _hMediaWindow;
hr := m_pD3DDirect3d.CreateDevice(D3DADAPTER_DEFAULT, // always the primary display adapter
D3DDEVTYPE_HAL,
0,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
@d3dpp,
m_pD3DDevice);
if (FAILED(hr)) then
ErrStr := ReportError('Cannot create a Direct3d device', hr)
else
result := TRUE;
end;
Fehler:
'Cannot create a Direct3d device :
COM Error 0x8876086C' (Nur mit 64Bit!)
PS:
Es liegt an den Headern..
gruss