我尝试用 C# 读取 JoyStick 中的数据,只要我使用 jeyGetPos 就可以正常工作。但我需要使用joyGetPosEx,因为它提供了更多数据,例如我需要的操纵杆的旋转。
class JoyStick
{
JOYINFO pji;
JOYINFOEX pjiex;
MMRESULT mmresult;
public JoyStick()
{
pji = new JOYINFO();
pjiex = new JOYINFOEX();
}
[StructLayout(LayoutKind.Sequential)]
public struct JOYINFO
{
public uint wYpos;
public uint wZpos;
public uint wButtons;
}
[StructLayout(LayoutKind.Sequential)]
public struct JOYINFOEX
{
public uint dwSize;
public uint dwFlags;
public uint dwXpos;
public uint dwYpos;
public uint dwZpos;
public uint dwRpos;
public uint dwUpos;
public uint dwVpos;
public uint dwButtons;
public uint dwButtonNumber;
public uint dwPOV;
public uint dwReserved1;
public uint dwReserved2;
}
[StructLayout(LayoutKind.Sequential)]
public struct MMRESULT
{
public uint uJoyID;
}
[DllImport("winmm.dll")]
public static extern uint joyGetNumDevs();
[DllImport("winmm.dll")]
public static extern MMRESULT joyGetPos(uint uJoyID, ref JOYINFO pji);
[DllImport("winmm.dll"), System.Security.SuppressUnmanagedCodeSecurity]
public static extern MMRESULT joyGetPosEx(uint uJoyID, ref JOYINFOEX pjiex);
public uint getNumDevs()
{
return joyGetNumDevs();
}
private MMRESULT getPos(uint uJoyID, ref JOYINFO pji)
{
return joyGetPos(uJoyID, ref pji);
}
private MMRESULT getPosEx(uint uJoyID, ref JOYINFOEX pjiex)
{
return joyGetPosEx(uJoyID, ref pjiex);
}
public JOYINFO getPos(uint id)
{
mmresult = getPos(id, ref pji);
return pji;
}
public JOYINFOEX getPosEx(uint id)
{
mmresult = getPosEx(id, ref pjiex);
return pjiex;
}
public uint getMMRESULT(){
return mmresult.uJoyID;
}
}
只要我尝试使用 JoyGetPosEx 读取数据,MMRESULT.uJoyID 就是 165
但joyGetPos 的值为0。
我相信 165 意味着 ID 错误,但我尝试了从 0 到 15 的每个有效 ID。
我的错误在哪里?
- 无需声明 MMRESULT 结构,只需使用 uint/int 作为函数
返回值,或使用enum
-
你必须填写dwSize
field.
pjiex.dwSize = Marshal.SizeOf(pjiex);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)