Witam, mam następujący problem..
Po udanej kompilacji i uruchomieniu programu wyskakuje znany błąd "object reference not set to an instance of an object" czyli typowy "access violation".
Próbuję sobie napisać jakiś prosty programik z wykorzystaniem DirectX, wykorzystując biblioteki Microsoftu wcześniej wgrane co VS2005 C#.
Program teraz piszę w Delphi 2005. (Mam tą wersję i w niej chcę pisać)
A teraz trochę kodu gdzie ten błąd występuje:
procedure TWinForm.InitDevice;
var
presentparams : array of PresentParameters;
begin
SetLength(presentparams,1);
presentparams[0] := PresentParameters.Create;
presentparams[0].Windowed := true;
presentparams[0].SwapEffect := SwapEffect.Discard;
device := Microsoft.DirectX.Direct3D.Device.Create(
0,
DeviceType.Hardware,
WinForm.TWinForm.ActiveForm.Handle,
CreateFlags.SoftwareVertexProcessing,
presentparams);
presentparams[0].Free;
SetLength(presentparams,0);
end;
Dokładnie na linii tworzącej "device" czyli
device := Microsoft.DirectX.Direct3D.Device.Create( ... );
Od początku "device" jest widziany w debugerze jako "null reference" ('nawet po teoretycznym wykonaniu' się tej linii).
"device" jest deklarowany obecnie w klasie, ale był także globalnie, nic to nie zmienia.
Kod ten działa w c# napisany jako:
public void InitializeDevice()
{
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed = true;
presentParams.SwapEffect = SwapEffect.Discard;
device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
}
Dodam, że google przeszukałem jak i to forum.