SDL 2 C# - 打开操纵杆设备

时间:2014-01-17 12:23:26

标签: c# windows joystick sdl-2

我正在尝试将我的旧项目从DirectX移植到SDL2。我正在使用SDL2-CS,因为我可以找到的唯一其他绑定是C#SDL2,它似乎已经过时(最后一个不稳定的版本是2010年的6.1.1beta,最后稳定 - 2008年的6.1.0)

操纵杆(Logitech Force 3D Pro / Logitech Attack 3)功能齐全,可在Windows中使用SDL2和DirectX 10在Linux中运行。这是我在C#中的Joystick-Hello-world(使用VS2010中的默认控制台应用程序项目;对SDL2-CS.dll的引用(SDL2.dll也出现在创建EXE的文件夹中)也在那里并且编译/运行没有任何错误):

    using System;
    using System.Collection.Generic;
    using System.Linq;
    using System.Text;
    using SDL2;

    namespace Joystick_In_SDL_2_For_CSharp
    {
       class Program
       {
          static void Main(string[] args)
          {
             SDL.SDL_Init(SDL.SDL_INIT_EVERYTHING);
             IntPtr myJoystick = SLD.SDL_Joystick(0);

             if(myJoystick == IntPtr.Zero)
                System.Console.WriteLine("Ooops, something fishy's goin' on here!" + SDL.SDL_GetError());
             else
                System.Console.WriteLine("You have successfully loaded the joystick \"" + SDL.SDL_JoystickName(myJoystick) + "\"");

             SDL.SDL_JoystickClose(myJoystick);
          }
       }
    }

控制台显示“Ooops” - 消息,SDL.SDL_GetError()的结果是有0个可用的操纵杆,名称自然= null。至少在Linux设备索引对我来说一直是== 0(我用1,2,3测试过...),因为我在某个时间点只有一个操纵杆连接到我的笔记本。我还需要添加更多内容吗?欢迎提出想法,提示和/或批评!

谢谢, RBA

1 个答案:

答案 0 :(得分:0)

这个问题的解决方案是由Github上的SDL2 C#包装器的维护者给我的 - flibitijibibo。他指出,他曾在某处读过Windows需要main()的[STAThread]属性,以便在Windows上运行SDL2-joystick(我想也是SDL2-gamecontroller)。遗憾的是,如果您使用的是Linux和Mono,无论上下提到的属性是否有效,这都不会改变这种情况。这是由于对硬件的一些隐藏的深层处理,这也很遗憾地转化为API。

[STAThread]
static void Main(string[] args){ ... }