- Код: Выделить всё
- 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-битном режиме.



