FfiWideChar
A Ruby gem helper for FFI binding libraries to convert from/to C native wchar_t
wide-string.
It provides 2 methods: read_wide_string
and to_wide_string
for converting.
Installation
Add this line to your application's Gemfile:
gem 'ffi_wide_char'
And then execute:
$ bundle
Or install it yourself as:
$ gem install ffi_wide_char
Usage
Example of calling native library functions using wide-string
type:
require 'ffi_wide_char'
# Unicode Popup Dialog
module Win
extend FFI::Library
ffi_lib 'user32'
ffi_convention :stdcall
attach_function :message_box, :MessageBoxW, %i[pointer buffer_in buffer_in int], :int
end
msg = FfiWideChar.to_wide_string('a中Я')
Win.(nil, msg, msg, 0)
# Convert multibyte to wide-string
ptr = FFI::MemoryPointer.new(:char, 16)
FfiWideChar::LibC.mbstowcs(ptr, '©Ðõ'.encode('filesystem'), 4)
str = FfiWideChar.read_wide_string ptr
puts str.encode('UTF-8')
Development
After checking out the repo, run bundle install
to install dependencies. Then, run bundle exec rake
to run the tests.
You can also run irb -r bundler/setup -r ffi_wide_char
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/nthachus/ffi_wide_char.
License
The gem is available as open source under the terms of the MIT License.