[Win32utils-devel] Unraveling a FAR*

Park Heesob phasis at gmail.com
Thu Jun 12 11:02:22 EDT 2008


Hi,
----- Original Message ----- 
From: "Berger, Daniel" <Daniel.Berger at qwest.com>
To: "Development and ideas for win32utils projects" 
<win32utils-devel at rubyforge.org>
Sent: Thursday, June 12, 2008 11:13 PM
Subject: Re: [Win32utils-devel] Unraveling a FAR*


<snip>
>> >> >
>> >> In order to call a function with address, we need a new
>> >> Win32::API.new
>> >> constructor like this:
>> >>
>> >> somefunc = Win32::API.new(procaddress,prototype,return) #
>> >> procaddress is
>> >> long integer for function pointer
>> >> somefunc.call(...)
>> >>
>> >> I guess the implementation is quite simple.
>> >
>> > I'd rather not overload API.new if we can help it. What
>> about a separate
>> > subclass?
>> >
>> > Win32::API::Function.new perhaps? Does that seem
>> reasonable? Or do you
>> > feel we should overload the API.new constructor?
>> >
>> API::Function.new might be suitable.
>>
>> > As for the implementation, I think it would just be a matter of
>> > subclassing API and redefining initialize. It looks like
>> API.call could
>> > be used as-is, correct?
>> >
>> Yes, you are correct.
>
> Ok, I've added it to win32-api in CVS. Please take a look and let me
> know if it looks alright to you. The only thing I was concerned about
> was casting the function pointer address on line 380. If that's wrong
> then please go ahead and correct it.
>
You've done almose perfect.
I think Win32APIFunc structure is needless.
But If you want to define Win32APIFunc structure and call it with api_call,
Win32APIFunc size and Win32API size must be same.
After mofication of Win32APIFunc like this:

typedef struct {
    HANDLE dummy;
    FARPROC function;
    int return_type;
    int prototype[16];
} Win32APIFunc;

Following Test code works fine.

require 'win32/api'
require 'windows/library'
include Windows::Library
hlib = LoadLibrary('user32')
addr = GetProcAddress(hlib,'MessageBeep')
func = Win32::API::Function.new(addr,'L','L')
func.call(0)

Regards,

Park Heesob





More information about the win32utils-devel mailing list