[Win32utils-devel] Unraveling a FAR*

Berger, Daniel Daniel.Berger at qwest.com
Thu Jun 12 15:07:58 EDT 2008


 

> -----Original Message-----
> From: win32utils-devel-bounces at rubyforge.org 
> [mailto:win32utils-devel-bounces at rubyforge.org] On Behalf Of 
> Park Heesob
> Sent: Thursday, June 12, 2008 9:02 AM
> To: Development and ideas for win32utils projects
> Subject: Re: [Win32utils-devel] Unraveling a FAR*
> 
> 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.

Ok, I got a bit overzealous trying to save 4 points. I've undone that
part. :)

<snip>

> 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)

Yep, works great. I'll release this as 1.1.0 this weekend, along with an
updated windows-pr library (added a winsock module), and an updated
win32-process library (now supports a real implementation of
Process.ppid).

Then I want to revisit win32-ole. :)

Thanks,

Dan


This communication is the property of Qwest and may contain confidential or
privileged information. Unauthorized use of this communication is strictly 
prohibited and may be unlawful.  If you have received this communication 
in error, please immediately notify the sender by reply e-mail and destroy 
all copies of the communication and any attachments.


More information about the win32utils-devel mailing list