[Win32utils-devel] win32-daemon 0.6.1 problem
James Tucker
jftucker at gmail.com
Fri Jan 23 12:38:40 EST 2009
On 23 Jan 2009, at 03:09, Heesob Park wrote:
> Hi,
>
> 2008/11/5 Berger, Daniel <Daniel.Berger at qwest.com>:
>>
>>
>>>>
>>>> Another thing to consider, now that Jruby's FFI is now bundled with
>>>> Jruby itself and supports callbacks, is whether or not we want to
>>>> declare Jruby as the preferred platform for creating Ruby
>>> services since
>>>> it supports native threads.
>>>>
>>>> Of course, this means finishing the port of win32-api. :)
>>>>
>>> I consider that there are three ways to go to support of the
>>> Windows native
>>> threads.
>>>
>>> 1. Use Jruby
>>> 2. Use Ruby 1.9.x
>>> 3. Implement the Sapphire :)
>>>
>>> If you dislike Ruby's dl library, using
>>> libffi(http://sourceware.org/libffi/) is also possible.
>>
>> Well, FFI is supposed to be universal now, though I can't get it to
>> build on Windows at the moment. So it would be the same code for MRI
>> (1.8 and 1.9) and Jruby.
>>
> In my thought, the current ruby ffi implementation don't care of the
> Windows support. As far as I know, the ffi developers have no definite
> plan about releasing of Windows binary. If it were built to binary
> with mingw compiler, It cannot work with Windows API. It uses
> dlopen,dlsym and dlclose instead of LoadLibrary,GetProcAddress and
> FreeLibrary.
The current hg repo seems to build under mingw with some patches
(removing unused (under win32) functionality), however, I have been
unable to get the gem install to work (i need to do some more reading
in rake-compiler). Until I have some more time to debug I won't know
much detail on that. iirc most or all of the ffi test suite passes,
from a repo build.
> I managed to build MSVC version of ruby ffi-0.2.0 using win32 libffi
> source ported by the Python's ctypes library. You can download ctypes
> at sourceforge [1].
> What's your thought about implementing ruby-ffi windows version? Is it
> worthwhile or meaningless?
FFI is slower, but provides significant implementation flexibility
(namely portability). It could be harder to stub out in some cases,
for users.
A bigger problem with this is that under mingw we don't get the SEH
stuff. GCC doesn't support it, and by the looks of the various
documentation / mailing list messages around, there is no really solid
implementation at this point (although this may be old/stale
information). From what I can see, it appears that the strongest
implementation can be found in the Wine project, but may take a lot of
work to get it where ruby would want / need it.
This means that _try, _finalize (both used in win32-services / win32-
api (i can't remember which - may be both)) don't work as expected.
My solution to date (using mingw), in order to maintain some semblance
of error handling, is to simply gem inst --platform=x86-mswin32-60
win32-services, however this is far from ideal.
I am doubtful that simply omitting these lines (_try, _finalize) is a
good idea, and more than this, I am not sure there is any way at all
to implement them whilst using the FFI.
> At now the callback function support is not working but the others
> work fine.
>
> I succeeded following test code:
>
> require 'ffi'
> module Foo
> extend FFI::Library
> ffi_lib("advapi32.dll")
> attach_function("GetUserName", "GetUserNameA",
> [:string, :pointer], :int)
> end
>
> buf = 0.chr * 256
> size = [256].pack('L')
> p Foo.GetUserName(buf,size)
> len = size.unpack('L').first
> puts buf[0,len]
>
>
>
> [1] http://sourceforge.net/project/showfiles.php?group_id=71702&package_id=71318
>
> Regards,
>
> Park Heesob
> _______________________________________________
> win32utils-devel mailing list
> win32utils-devel at rubyforge.org
> http://rubyforge.org/mailman/listinfo/win32utils-devel
More information about the win32utils-devel
mailing list