- Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, DirectInput;
type
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
DI8: IDirectInput8;
DID: IDirectInputDevice8;
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var
R: HRESULT;
begin
R:= DirectInput8Create(HINSTANCE,DIRECTINPUT_VERSION,IID_IDirectInput8,DI8,nil);
Assert(R=0,IntToStr(R));
R:= DI8.CreateDevice(GUID_SysKeyboard,DID,nil);
Assert(R=0,IntToStr(R));
R:= DID.SetDataFormat(c_dfDIKeyboard);
Assert(R=0,IntToStr(R)); //<--хлопок в 64бит (R=-214024809; инвалидный_параметр)
end;
end.
32-битная прога работает нормально. А 64-битная вылетает в указанном месте. Есть подозрение на некорректное определение c_dfDIKeyboard в заголовочном файле. Кто может проверьте код у себя в 64-битном режиме.