Type a page name and press Enter. You'll jump to the page if it exists, or you can create it if it doesn't.
To create a page in a module other than rpcrt4, prefix the name with the module name and a period.
UuidCreate (rpcrt4)
.
C# Signature:
[DllImport("rpcrt4.dll", SetLastError=true)]
static extern int UuidCreateSequential(out Guid guid);
[DllImport("rpcrt4.dll"]
static extern int UuidCreate(ref UUID id);
VB Signature:
Declare Function UuidCreateSequential Lib "rpcrt4.dll" (ByRef id As Guid) As Integer
Declare Function UuidCreate Lib "rpcrt4.dll" (ByRef id As UUID) As Integer
User-Defined Types:
None.
[StructLayout(LayoutKind.Sequential)]
private struct UUID
{
public uint Data1;
public ushort Data2;
public ushort Data3;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=8)]
public byte[] Data4;
}
Notes:
Microsoft changed the UuidCreate function so it no longer uses the machine's MAC address as part of the UUID. Since CoCreateGuid calls UuidCreate to get its GUID, its output also changed. If you still like the GUIDs to be generated in sequential order (helpful for keeping a related group of GUIDs together in the system registry), you can use the UuidCreateSequential function.
private const int RPC_S_OK = 0;
private const int RPC_S_OUT_OF_MEMORY = 14;
private const int RPC_S_UUID_LOCAL_ONLY = 1824;
UUID id = new UUID();
rc = UuidCreate(ref id);
if (rc != RPC_S_OK && rc != RPC_S_UUID_LOCAL_ONLY)
{
const int RPC_S_OK = 0;
Guid g;
int hr = UuidCreateSequential(out g);
if (hr != RPC_S_OK)
throw new ApplicationException
("UuidCreateSequential failed: " + hr);
return g;
// Handle error
}
Typically, the UUID is required as a string. Here is how:
Sample Code in VB:
Sub Main()
Dim myId As Guid
Dim code As Integer
code = UuidCreateSequential(myId)
If code <> 0 Then
Console.WriteLine("UuidCreateSequential failed: {0}", code)
Else
Console.WriteLine(myId)
End If
End Sub
[DllImport("rpcrt4.dll")]
private static extern int UuidToString(ref UUID uuid, ref System.IntPtr str);
[DllImport("rpcrt4.dll")]
private static extern int RpcStringFree(ref System.IntPtr str);
public static string generateUUID()
{
int rc;
Alternative Managed API:
Do you know one? Please contribute it!
UUID id = new UUID();
rc = UuidCreate(ref id);
if (rc != RPC_S_OK && rc != RPC_S_UUID_LOCAL_ONLY)
{
throw <cannot create UUID exception>;
}
System.IntPtr str = new System.IntPtr();
rc = UuidToString(ref id, ref str);
switch(rc)
{
case RPC_S_OK:
{
break;
}
case RPC_S_OUT_OF_MEMORY:
{
throw <out of memory excepetion>;
}
default:
{
throw <UuidToString failed exception>;
}
}
helpful tips or sample code to share for using this API in managed code?
corrections to the existing content?
variations of the signature you want to share?
additional languages you want to include?
Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).