NAME
    Win32::API::Interface - Object oriented interface generation

SYNOPSIS
        package MyModule;
            use base qw/Win32::API::Interface/;

            __PACKAGE__->generate( "kernel32", "GetCurrentProcessId", "", "N" );
            __PACKAGE__->generate( "kernel32", "GetCurrentProcessId", "", "N", 'get_pid' );

            1;

            my $obj = MyModule->new );
            print "PID: " . $obj->GetCurrentProcessId . "\n";
            print "PID: " . $obj->get_pid . "\n";

DESCRIPTION
    This module provides functions for generating a object oriented
    interface to Win32 API functions.

METHODS
  new
        my $obj = Module->new;

    Win32::API::Interface provides a basic constructor. It generates a
    hash-based object and can be called as either a class method or an
    object method.

  self
        my $self = $obj->self;

    Returns itself. Acutally useless and mainly used internally. Can also be
    called as a object method.

        Win32::API::Interface->self

  generate
        __PACKAGE__->generate( "kernel32", "GetCurrentProcessId", "", "N" );

    This generates a method called *GetCurrentProcessId* which is exported
    by *kernel32.dll*. It does not take any input parameters but returns a
    value of type *long*.

        __PACKAGE__->generate( "kernel32", "GetCurrentProcessId", "", "N", "get_pid" );

    Actually the same as above, but this will generate a method called
    *get_pid*. This is useful if you do not want to rely on the API function
    name.

        __PACKAGE__->generare(
            "advapi32",
            "EncryptFile",
            "P", "I", "",
            sub {
                my ( $self, $filename ) = @_;
                return $self->Call( File::Spec->canonpath($filename) );
            }
        );

    As the seventh and last parameter you may provide a function reference
    for modifying the input to and output from the API function.

        __PACKAGE__->generate(
            [ "kernel32", "GetTempPath",         "NP", "N" ],
            [ "kernel32", "GetCurrentProcessId", "",   "N", "get_pid" ],
            [ "advapi32" ,"EncryptFile",         "P",  "I", "",       $coderef ],
        );

    You may call *generate* passing an hash reference of array references.

        __PACKAGE__->generate( {
            "kernel32" => [
                [ "GetTempPath",         "NP", "N" ],
                [ "GetCurrentProcessId", "",   "N", "get_pid" ],
            ],
            "user32" => [
                [ "GetCursorPos",        "P",  "I"]
            ],
            "advapi32" => [
                [ "EncryptFile",         "P",  "I", "",       $coderef ],
            ].
        } );

  generated
    Returns a list of all real generated API function names

        __PACKAGE__->generated( );

AUTHOR
    Sascha Kiefer, esskar@cpan.org

COPYRIGHT AND LICENSE
    Copyright (C) 2006 Sascha Kiefer

    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.