The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include <objbase.h>
#include <string.h>
MODULE = Win32API::GUID PACKAGE = Win32API::GUID
char*
CreateGuid()
CODE:
GUID guid;
char buffer[13];
char ret[37];
int c;
CoCreateGuid (&guid);
sprintf (buffer, "%04X", (int) ((guid.Data1 & 0xFFFF0000) >> 16));
strcpy (ret, buffer);
sprintf (buffer, "%04X", (int) (guid.Data1 & 0xFFFF));
strcat (strcat (ret, buffer), "-");
sprintf (buffer, "%04X", (int) guid.Data2);
strcat (strcat (ret, buffer), "-");
sprintf (buffer, "%04X", (int) guid.Data3);
strcat (strcat (ret, buffer), "-");
for (c = 0; c != 2; c++){
sprintf (buffer, "%02X", (int) guid.Data4[c]);
strcat (ret, buffer);
}
strcat (ret, "-");
for (c = 2; c != 8; c++){
sprintf (buffer, "%02X", (int) guid.Data4[c]);
strcat (ret, buffer);
}
RETVAL = ret;
OUTPUT:
RETVAL