Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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
编组C++;包含枚举到C的结构# 需要将C++ C++结构编组到C语言中。它表示从平板电脑触摸传感器输入的wm_Tablet_flick信息。因此,我试图在C#应用程序中处理这些消息: typedef struct FLICK_DATA { FLICKACTION_COMMANDCODE iFlickActionCommandCode :5; FLICKDIRECTION iFlickDirection :3; BOOL fControlModifier :1; BOOL fMenuModifier :1; BOOL fAltGRModifier :1; BOOL fWinModifier :1; BOOL fShiftModifier :1; INT iReserved :2; BOOL fOnInkingSurface :1; INT iActionArgument :16; } FLICK_DATA;_C#_C++_Struct_Interop_Marshalling - Fatal编程技术网

编组C++;包含枚举到C的结构# 需要将C++ C++结构编组到C语言中。它表示从平板电脑触摸传感器输入的wm_Tablet_flick信息。因此,我试图在C#应用程序中处理这些消息: typedef struct FLICK_DATA { FLICKACTION_COMMANDCODE iFlickActionCommandCode :5; FLICKDIRECTION iFlickDirection :3; BOOL fControlModifier :1; BOOL fMenuModifier :1; BOOL fAltGRModifier :1; BOOL fWinModifier :1; BOOL fShiftModifier :1; INT iReserved :2; BOOL fOnInkingSurface :1; INT iActionArgument :16; } FLICK_DATA;

编组C++;包含枚举到C的结构# 需要将C++ C++结构编组到C语言中。它表示从平板电脑触摸传感器输入的wm_Tablet_flick信息。因此,我试图在C#应用程序中处理这些消息: typedef struct FLICK_DATA { FLICKACTION_COMMANDCODE iFlickActionCommandCode :5; FLICKDIRECTION iFlickDirection :3; BOOL fControlModifier :1; BOOL fMenuModifier :1; BOOL fAltGRModifier :1; BOOL fWinModifier :1; BOOL fShiftModifier :1; INT iReserved :2; BOOL fOnInkingSurface :1; INT iActionArgument :16; } FLICK_DATA;,c#,c++,struct,interop,marshalling,C#,C++,Struct,Interop,Marshalling,其中: typedef enum FLICKACTION_COMMANDCODE { FLICKACTION_COMMANDCODE_NULL = 0, FLICKACTION_COMMANDCODE_SCROLL = 1, FLICKACTION_COMMANDCODE_APPCOMMAND = 2, FLICKACTION_COMMANDCODE_CUSTOMKEY = 3, F

其中:

    typedef enum FLICKACTION_COMMANDCODE {
      FLICKACTION_COMMANDCODE_NULL          = 0,
      FLICKACTION_COMMANDCODE_SCROLL        = 1,
      FLICKACTION_COMMANDCODE_APPCOMMAND    = 2,
      FLICKACTION_COMMANDCODE_CUSTOMKEY     = 3,
      FLICKACTION_COMMANDCODE_KEYMODIFIER   = 4 
    } FLICKACTION_COMMANDCODE;
以及:

在C方面,我得到:

    [StructLayout(LayoutKind.Sequential)]
    private struct FLICKDATA
    {
        internal FLICKACTION_COMMANDCODE iFlickActionCommandCode;
        internal FLICKDIRECTION iFlickDirection;
        public bool fControlModifier;
        public bool fMenuModifier;
        public bool fAltGRModifier;
        public bool fWinModifier;
        public bool fShiftModifier;
        public int iReserved;
        public bool fOnInkingSurface;
        public int iActionArgument;
    }

    public enum FLICKDIRECTION
    {
      FLICKDIRECTION_RIGHT       = 0,
      FLICKDIRECTION_UPRIGHT     = 1,
      FLICKDIRECTION_UP          = 2,
      FLICKDIRECTION_UPLEFT      = 3,
      FLICKDIRECTION_LEFT        = 4,
      FLICKDIRECTION_DOWNLEFT    = 5,
      FLICKDIRECTION_DOWN        = 6,
      FLICKDIRECTION_DOWNRIGHT   = 7,
      FLICKDIRECTION_INVALID     = 8 
    }

    public enum FLICKACTION_COMMANDCODE
    {
      FLICKACTION_COMMANDCODE_NULL          = 0,
      FLICKACTION_COMMANDCODE_SCROLL        = 1,
      FLICKACTION_COMMANDCODE_APPCOMMAND    = 2,
      FLICKACTION_COMMANDCODE_CUSTOMKEY     = 3,
      FLICKACTION_COMMANDCODE_KEYMODIFIER   = 4 
    }
然后,我确定结构的大小,如下所示:

private int _flickDataSize = Marshal.SizeOf(new FLICKDATA());
最后,尝试使用以下命令将指针转换为结构:

     FLICKDATA data = new FLICKDATA();
     data = (FLICKDATA)Marshal.PtrToStructure(m.WParam, typeof(FLICKDATA));
或者使用内置的GetLParam方法:

     data = (FLICKDATA)m.GetLParam(typeof(FLICKDATA));

但这两种解决方案都不起作用,要么是空的,要么是垃圾。我在这里做错了什么

你试过铸造数据吗?而不是像那样直接访问它?或者创建一个指向FlickData的指针。此外,没有数据是随机的!/垃圾在那里是有原因的,你只需要理解它为什么在那里

因此,请尝试创建指向FlickData的指针,或者:

FLICKDATA*data=FLICKDATA; 试试看(可能要玩一玩)

尝试将Flickdata强制转换为数据变量: 自动数据(静态_-cast(FLICKDirection))

     data = (FLICKDATA)m.GetLParam(typeof(FLICKDATA));