postmessage如何传递浮点型跟整型

解决方案 »

  1.   


    PostMessageA(
        __in_opt HWND hWnd,
        __in UINT Msg,
        __in WPARAM wParam,
        __in LPARAM lParam);
    利用 wParam, lParam传啊~
      

  2.   

    int a = 1;
    float b = 2;
    postmessage(HWND,WM_XXX,(WPARAM)a, (LPARAM)b);
      

  3.   

    传指针
    static double dbVal;
    dbVal = XXXXX;
    PostMessage(hwnd, wPram, (LPARAM)&dbVal)
      

  4.   

    你既然这么问,肯定是对数据类型的二进制表示有一定理解了
    先说float的格式IEEE754标准
    float是32位数据,比如你有个浮点数变量为f
    然后你把它拆成4个字节的独立信息,这个要用union联合来拆
    typedef union
    {
       float x;
       char  y[5]
    }F32;F32 f32;
    然后你把你的浮点数f赋值给F32联合类的变量
    f32 = f;
    下一步要把你的字节拆到整形里
    int i;
    i = (f32.s[0] << 24) | (f32.s[1] << 16) | (f32.s[2] << 8) | (f32.s[3]);
    这里面暂不讨论cpu是大端还是小端,但是你到接收这个消息的对侧函数里要按照同样的办法把他还原成float
    比如你这里把i用wParam发过来了
    f32 f;
    f = wParam;
    float recv = f.x;
    如果这个数不对,你就把给i赋值那段的0到3下标反过来标 
      

  5.   

    自己弄个struct,定义好类型发出去。接收端解析一下即可。
      

  6.   


    我就想有么有办法直接传,因为是给客户发消息,现在是权值处理,乘过10,得到数据再除10。
    必须这么转的,因为float是内部类型,而且你的WPARAM只能传整形