Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FFI: union 対応 #309

Open
x022235 opened this issue Jun 12, 2012 · 0 comments
Open

FFI: union 対応 #309

x022235 opened this issue Jun 12, 2012 · 0 comments

Comments

@x022235
Copy link
Member

x022235 commented Jun 12, 2012

背景

  • Win32 APIを叩くこともたまにあって、たいがいは単純なんですが、SendInput()を使ってみようとしたところで手が止まりました。引数にunionで複数の構造体をまとめたメンバーをもった構造体をとるのですね。unionでまとめられたメンバーをどう扱えばいいのか、さっぱりでした。

    http://d.hatena.ne.jp/hoshimin/20060630

  • typedef struct tagINPUT {
      DWORD type;
      union {
        MOUSEINPUT    mi;
        KEYBDINPUT    ki;
        HARDWAREINPUT hi;
      };
    } INPUT, *PINPUT;
    

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms646270(v=vs.85).aspx

仕様

こんな感じ。

(c:define-c-struct MOUSEINPUT
  ...)
(c:define-c-struct KEYBDINPUT
  ...)
(c:define-c-struct HARDWAREINPUT
  ...)
(c:define-c-struct INPUT
  (DWORD type)
  (c:union (MOUSEINPUT mi)
           (KEYBDINPUT ki)
           (HARDWAREINPUT hi)))

(MOUSEINPUT-dx (INPUT-mi input)) ;=> xxx
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant