Subject:
Re: [ruby-ffi] Re: unable to find method?
From:
Wayne Meissner
Date:
12/19/09 6:34 AM
To:
ruby-ffi@googlegroups.com

Is MessageBoxA a WINAPI function?  That might need:

  ffi_convention :stdcall

before the attach_function call

2009/12/19 rogerdpack <rogerpack2005@gmail.com>:
>
>> BTW, where are you guys with coming up with more interesting windows examples (64-bit, pointer-to-pointer return types, etc)!? ;)
>
> Got stuck with this example segfaulting.
>
> require 'ffi'
>
> # button constants
> BUTTONS_OK = 0
> BUTTONS_OKCANCEL = 1
> BUTTONS_ABORTRETRYIGNORE = 2
> BUTTONS_YESNO = 4
>
> # return code constants
> CLICKED_OK = 1
> CLICKED_CANCEL = 2
> CLICKED_ABORT = 3
> CLICKED_RETRY = 4
> CLICKED_IGNORE = 5
> CLICKED_YES = 6
> CLICKED_NO = 7
>
>
> extend FFI::Library
> ffi_lib 'user32'
>
> attach_function :msgbox, 'MessageBoxA',
> [:pointer, :string, :string, :uint], :int
>
> def message_box(txt, title=APP_TITLE, buttons=BUTTONS_OK)
>    ffi_lib 'user32'
>    r = msgbox(nil, txt, title, buttons)
>    return r
> end
>
> response = message_box("Are you sure you want to proceed?",
> "Proceed?", BUTTONS_YESNO)
> if response == CLICKED_YES
>    # insert your code here
> end
>
> -r
>