DirectInput8 64bit

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Osmiy
новенький
Сообщения: 46
Зарегистрирован: 07.05.2016 20:18:39

DirectInput8 64bit

Сообщение Osmiy »

Запускаю вот такой минимальный код в Win7 64bit:

Код: Выделить всё

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-битном режиме.
Lucifer
постоялец
Сообщения: 132
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Сообщение Lucifer »

Lazarus 3.4 x64, WinSrv 2012R2. Полет нормальный.
P.S. Ты б хоть ошибку привел, что у тебя там.
Osmiy
новенький
Сообщения: 46
Зарегистрирован: 07.05.2016 20:18:39

Сообщение Osmiy »

Lucifer писал(а):P.S. Ты б хоть ошибку привел, что у тебя там.
R<>0
Lucifer писал(а):Lazarus 3.4 x64, WinSrv 2012R2. Полет нормальный.
Спасибо.
Скиньте ваш файл (DirectInput), пожалуйста.
Lucifer
постоялец
Сообщения: 132
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Сообщение Lucifer »

Решение: открываем модуль DirectInput. И меняем все packed record на просто record. Так работает. Не знаю, правда, насколько корректно.
Osmiy
новенький
Сообщения: 46
Зарегистрирован: 07.05.2016 20:18:39

Сообщение Osmiy »

Не помогло. Но уже не нужно, я перешёл тупо на WinAPI. Т.е. заюзал GetKeyboardState.
Lucifer
постоялец
Сообщения: 132
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Сообщение Lucifer »

Osmiy писал(а):Не помогло. Но уже не нужно, я перешёл тупо на WinAPI. Т.е. заюзал GetKeyboardState.
Странно. У меня взлетело, как из пулемета. Хотя на лиуксе оно все равно нежизнеспособное.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Может я чего-то не понимаю, но всегда считал, что DirectInput - часть виндовских DirectХ и под линуксами может работать только в каком-нибудь вайне и не иначе... На серверах DirectХ тоже не всегда есть из коробки, иногда его надо устанавливать дополнительно.
Alex2013
долгожитель
Сообщения: 3211
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Assert(R=0,IntToStr(R)); ? Может быть стоит написать так Assert(R=0,R.ToString); (отвязываем от возможных ограничений IntToStr )
Зы
Впрочем извиняюсь, вероятно я просто не вник в суть проблемы .
Ответить