Zitat von
Alex_kfm:
Das mit dem
DirectX 9 ist klar. Ich werde mal zusehen, dass ich vorher abfrage, ob die richtige
DirectX Version überhaupt installiert ist. Weiss jemand zufällig auf die Schnelle, wie man das am sinnvollsten macht? Ich könnte ja auf das Vorhandensein der d3dx9.dll prüfen, doch das scheint mir eine wenig saubere Methode zu sein.
Das waere auch mein erster gedanke gewesen. Man kann aber auch in der Registry nachgucken. Aaber: Nachdem du sowieso nicht direkt auf die Direct3DCreate9-Funktion aus der d3d9.dll verweisen kannst, wuerde es Sinn machen, einfach nur auf das Vorhandensein der
dll zu achten, weil man sie dynamisch laden muss:
Delphi-Quellcode:
function CreateD3D(): IDirect3D9;
type
TCreateD3D = function(DWORD): IDirect3D9;
var
Creation: TCreateD3D;
D3D9Dll: HMODULE;
begin
result := nil; //Wenn Direct3D9 nicht da is, wird nil zurueckgegeben
D3D9Dll := LoadLibrary('d3d9.dll');
if (D3D9Dll = 0) then
exit;
Creation := TCreateD3D(GetProcAddress(D3D9Dll, 'Direct3DCreate9');
if (Creation = nil) then
exit;
result := Creation(D3D_SDK_VERSION);
end;
Du musst aber acht geben: Du darfst nicht mehr einfach die Direct3D-
Unit einbinden, dort wird naemlich statisch auf die Funktionen verlinkt. Du musst stattdessen die Deklaration des IDirect3D9-Interfaces mitsamt den benoetigten Typen rauskopieren und so dann verwenden.
@RainerO: Der Code ist etwas suboptimal
Er erstellt extra fuer die Pruefung ein Fenster und ein Device, dabei ist das nicht noetig, weil auch das Direct3D9-Interface die benoetigten Funktionen mitbringt
greetz
Mike