ja, ich weiß, ich habe schon mal eine Frage zu FloatToStr gestellt. Aber dieses Mal habe ich ein anderes Problem:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Windows, Controls, Dialogs, direct3d9;
type
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var
d3ddm : TD3DDisplayMode;
D3DDev9 : IDirect3DDevice9;
D3D9 : IDirect3D9;
d3dpp : TD3DPresent_Parameters;
begin
// Create DirectX
D3D9 := Direct3DCreate9(D3D_SDK_VERSION);
Fillchar(d3dpp, sizeof(d3dpp), 0);
with (d3dpp) do begin
SwapEffect := D3DSWAPEFFECT_DISCARD;
Windowed := true;
D3D9.GetAdapterDisplayMode(D3DADAPTER_DEFAULT,d3ddm);
BackBufferFormat := d3ddm.Format;
end;
D3D9.CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,Handle,D3DCREATE_SOFTWARE_VERTEXPROCESSING,@d3dpp,D3DDev9);
Showmessage(FloatToStr(0.10000000149012)); // Shows 0,2 ???
end;
end.
In der Messagebox steht bei mir immer 0,2!!!
Mal abgesehen davon, dass der Code zum Erzeugen von DirectX total sinnlos ist (Ich habe es soweit wie möglich reduziert), ist die Problematik klar: 0.10000000149012 <> 0,2, auch wenn man rundet
Ich verwende die Header von http://clootie.ru/ Aber auch mit diesen hier (http://www.delphidev.de/forum/viewtopic.php?id=752) tritt der Fehler auf.
Irgendwo gibt es anscheinend ein Memory leak - bevor ich jetzt in DirectX danach suche, möchte ich darum bitten, dass Ihr mal in verschiedenen, größeren Programmen die fragliche Zeile einfügt, um zu sehen, ob sich der Fehler auf DirectX beschränkt.
Ich habe allgemein keine große Erfahrung mit solchen Fehlern - wo und wie muss ich als nächstes suchen?