The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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.