| win32-guidgen documentation | Contained in the win32-guidgen distribution. |
Win32::Guidgen - Perl extension that generates GUID strings.
use strict;
use Win32::Guidgen;
my $guid = Win32::Guidgen::create();
print "New GUID is $guid\n";
my $guid = Win32::Guidgen::gen();
print "New GUID is $guid\n";
my $guid = Win32::Guidgen::generate();
print "New GUID is $guid\n";
Win32::Guidgen generate Generates Globally Unique Identifiers (GUIDs).
It exposes 3 methods: create(), gen() and generate(), which all return a string formatted like the following sample:
{C200E360-38C5-11CE-AE62-08002B2B79EF}
where the successive fields break the GUID into the form DWORD-WORD-WORD-WORD-WORD.DWORD covering the 128-bit GUID.
The string includes enclosing braces, which are an OLE convention.
None by default.
You install Win32::Guidgen, as you would install any perl module library,
by running these commands:
perl Makefile.PL make make test make install
Win32::Guidgen was written by Joe P. Hayes <joephayes@_NOSPAM_yahoo.com> (Take out '_NOSPAM_', to send.) in 2001.
Neil Hunt <neilh@_NOSPAM_thehunts.id.au<gt>> contributed a new version of the GUID generator in 2004.
The Win32::Guidgen module is Copyright (c) 2001 Joe P. Hayes.
All Rights Reserved.
You may distribute under the terms of either the GNU General Public License or the Artistic License, as specified in the Perl README file.
The Win32::Guidgen module is free software.
IT COMES WITHOUT WARRANTY OF ANY KIND.
Commercial support for Perl can be arranged via The Perl Clinic. For more details visit:
http://www.perlclinic.com
| win32-guidgen documentation | Contained in the win32-guidgen distribution. |
package Win32::Guidgen; #require 5.005_62; require Win32::API; use strict; use warnings; use Carp; require Exporter; our @ISA = qw(Exporter); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. # This allows declaration use Win32::Guidgen ':all'; # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK # will save memory. our %EXPORT_TAGS = ( 'all' => [ qw( ) ] ); our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); our @EXPORT = qw( create ); our $VERSION = '0.04'; sub create { return _gen(); } sub gen { return _gen(); } sub generate { return _gen(); } sub _gen { my $UuidCreate = new Win32::API('rpcrt4', 'UuidCreate', 'P', 'N'); die 'Could not load UuidCreate from rpcrt4.dll' unless $UuidCreate; my $UuidToString = new Win32::API('rpcrt4', 'UuidToString', 'PP', 'N'); die 'Could not load UuidToString from rpcrt4.dll' unless $UuidToString; my $RpcStringFree = new Win32::API('rpcrt4', 'RpcStringFree', 'P', 'N'); die 'Could not load RpcStringFree from rpcrt4.dll' unless $RpcStringFree; my $uuid = "*" x 16; # Allocate enough space to store the uuid structure my $ret = $UuidCreate->Call( $uuid ); die "UuidCreate failed with error: $ret" unless $ret == 0; my $ptr_str = pack("P",0); $ret = $UuidToString->Call( $uuid, $ptr_str ); die "UuidToString failed with error: $ret" unless $ret == 0; my $guid_str = unpack( "p", $ptr_str ); $ret = $RpcStringFree->Call( $ptr_str ); die "RpcStringFree failed with error: $ret" unless $ret == 0; return '{' . uc($guid_str) . '}'; } 1; __END__