Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java虚拟游戏板_Java_Virtual_Directinput_Gamepad_Xinput - Fatal编程技术网

Java虚拟游戏板

Java虚拟游戏板,java,virtual,directinput,gamepad,xinput,Java,Virtual,Directinput,Gamepad,Xinput,问题 我正在开发一个定制的硬件控制器,我想在用Java处理它之后,将它的输入映射到一个虚拟的XInput控制器。基本上出于所有目的,我想直接从java控制XInput控制器 我想到的解决方案 编写一个设备驱动程序,这似乎是一个真正的麻烦,我很乐意避免。我以前从未编写过设备驱动程序,也不知道如何注册XInput控制器。这似乎需要很长时间才能完成,时间我既没有也不想花 使用PPJoy和library。我想避免这种情况,因为PPJoy非常过时(从我能找到的上一次更新至今已经超过10年),并且需要额外

问题 我正在开发一个定制的硬件控制器,我想在用Java处理它之后,将它的输入映射到一个虚拟的XInput控制器。基本上出于所有目的,我想直接从java控制XInput控制器

我想到的解决方案

  • 编写一个设备驱动程序,这似乎是一个真正的麻烦,我很乐意避免。我以前从未编写过设备驱动程序,也不知道如何注册XInput控制器。这似乎需要很长时间才能完成,时间我既没有也不想花
  • 使用PPJoy和library。我想避免这种情况,因为PPJoy非常过时(从我能找到的上一次更新至今已经超过10年),并且需要额外的一层来将DirectInput转换为XInput。图书馆也拒绝为我编译
  • 为…开发一个包装器。然而,这需要从DirectInput到XInput的重新映射。我不熟悉C/C++包装,但到目前为止,这似乎是最好的选择

有人知道如何解决这个问题吗?我曾经考虑过跳过XInput,使用键盘/鼠标机器人(AWT)来完成它,但游戏拒绝接收软件输入,很可能它们只读取硬件数据。模拟键盘/鼠标会很好,但不是最佳的,因为它会相当尴尬,但我无法找到一种方法来做到这一点的方式,游戏承认。感谢大家的帮助 编辑 好的,我很好,快速举例,假设您有一个example.h文件,创建一个example.I,在同一位置:

%module example

%{
#include "example.h"
%}

%include "example.h"
确保swig在您的路径中,然后执行以下操作:

%swig -java example.i
然后,您需要构建一个本机java库,比如它是如何完成的(注意,您不需要做所有的javah工作),但基本上:

% g++ -Wl,--add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" 
  -shared -o example.dll example.c example.cpp

这将为您提供dll,在运行java程序时,您必须将其与任何其他依赖库一起保留在您的路径中。注意,如果你编译一个32位的库,你需要使用32位JVM。

< p>写一个包装器,你不需要知道任何,我重复任何C++代码,如果你真的不想这样做。简单使用。有很多例子,从一些事情开始。(注意,我不打算包括这个例子,因为已经有足够的东西了)。如果你有困难,请留言,我会帮你的

编辑 好的,我很好,快速举例,假设您有一个example.h文件,创建一个example.I,在同一位置:

%module example

%{
#include "example.h"
%}

%include "example.h"
确保swig在您的路径中,然后执行以下操作:

%swig -java example.i
然后,您需要构建一个本机java库,比如它是如何完成的(注意,您不需要做所有的javah工作),但基本上:

% g++ -Wl,--add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" 
  -shared -o example.dll example.c example.cpp
这将为您提供dll,在运行java程序时,您必须将其与任何其他依赖库一起保留在您的路径中。注意:如果编译32位库,则需要使用32位jvm。

谢谢:)我稍后会尝试,因为我似乎吃了不好的东西,所以我现在在床上,无法尝试。包装VJoy似乎是最好的选择。并不是说我不能读/写C++,我只是乐意避免这样做。制作包装纸似乎也是一门很有用的知识。谢谢:)我以后会试试看,好像我吃了不好的东西,所以我现在躺在床上,无法尝试。包装VJoy似乎是最好的选择。并不是说我不能读/写C++,我只是乐意避免这样做。制作包装似乎也是一门非常有用的知识。