DirectInput8 64bit

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

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

DirectInput8 64bit

Сообщение Osmiy » 02.09.2024 04:21:53

Запускаю вот такой минимальный код в 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-битном режиме.
Osmiy
новенький
 
Сообщения: 40
Зарегистрирован: 07.05.2016 21:18:39

Re: DirectInput8 64bit

Сообщение Lucifer » 02.09.2024 10:25:54

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

Re: DirectInput8 64bit

Сообщение Osmiy » 02.09.2024 13:14:54

Lucifer писал(а):P.S. Ты б хоть ошибку привел, что у тебя там.
R<>0

Lucifer писал(а):Lazarus 3.4 x64, WinSrv 2012R2. Полет нормальный.
Спасибо.
Скиньте ваш файл (DirectInput), пожалуйста.
Osmiy
новенький
 
Сообщения: 40
Зарегистрирован: 07.05.2016 21:18:39

Re: DirectInput8 64bit

Сообщение Lucifer » 05.09.2024 13:18:38

Решение: открываем модуль DirectInput. И меняем все packed record на просто record. Так работает. Не знаю, правда, насколько корректно.
Lucifer
постоялец
 
Сообщения: 121
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: DirectInput8 64bit

Сообщение Osmiy » 06.09.2024 23:48:54

Не помогло. Но уже не нужно, я перешёл тупо на WinAPI. Т.е. заюзал GetKeyboardState.
Osmiy
новенький
 
Сообщения: 40
Зарегистрирован: 07.05.2016 21:18:39

Re: DirectInput8 64bit

Сообщение Lucifer » 09.09.2024 10:05:16

Osmiy писал(а):Не помогло. Но уже не нужно, я перешёл тупо на WinAPI. Т.е. заюзал GetKeyboardState.


Странно. У меня взлетело, как из пулемета. Хотя на лиуксе оно все равно нежизнеспособное.
Lucifer
постоялец
 
Сообщения: 121
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: DirectInput8 64bit

Сообщение Снег Север » 09.09.2024 12:04:57

Может я чего-то не понимаю, но всегда считал, что DirectInput - часть виндовских DirectХ и под линуксами может работать только в каком-нибудь вайне и не иначе... На серверах DirectХ тоже не всегда есть из коробки, иногда его надо устанавливать дополнительно.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3038
Зарегистрирован: 27.11.2007 16:14:47

Re: DirectInput8 64bit

Сообщение Alex2013 » 11.09.2024 13:04:23

Assert(R=0,IntToStr(R)); ? Может быть стоит написать так Assert(R=0,R.ToString); (отвязываем от возможных ограничений IntToStr )
Зы
Впрочем извиняюсь, вероятно я просто не вник в суть проблемы .
Alex2013
долгожитель
 
Сообщения: 3048
Зарегистрирован: 03.04.2013 11:59:44


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 18

Рейтинг@Mail.ru
cron