Create a (unique) GUID (2) (Views: 28)
Problem/Question/Abstract: I have a very simple piece of test code to generate and display a GUID on the screen every time a user clicks on a button on a form. When I compile the program and run the executable on my Windows 2000 machine, I get a unique GUID every time I click the button, which is what I expect from the documentation. However, when I run the same executable on any Windows 98 SE machine, and even a Windows NT 4.0 Server (with SP5), it simply generates the exact same GUID over, and over, and over again. Answer: Using RAW API: { ... } var Form1: TForm1; UuidCreateFunc: function(var guid: TGUID): HResult; stdcall; implementation {$R *.DFM} uses ComObj; procedure TForm1.Button1Click(Sender: TObject); var hr: HRESULT; m_TGUID: TGUID; handle: THandle; begin handle := LoadLibrary('RPCRT4.DLL'); @UuidCreateFunc := GetProcAddress(Handle, 'UuidCreate'); hr := UuidCreateFunc(m_TGUID); if failed(hr) then RaiseLastWin32Error; ShowMessage(GUIDToString(m_TGUID)); end; With WIN2K support: { ... } var Form1: TForm1; UuidCreateFunc: function(var guid: TGUID): HResult; stdcall; implementation {$R *.DFM} uses ComObj; procedure TForm1.Button1Click(Sender: TObject); var hr: HRESULT; m_TGUID: TGUID; handle: THandle; WinVer: _OSVersionInfoA; begin handle := LoadLibrary('RPCRT4.DLL'); WinVer.dwOSVersionInfoSize := sizeof(WinVer); getversionex(WinVer); if WinVer.dwMajorVersion >= 5 then {Windows 2000 } @UuidCreateFunc := GetProcAddress(Handle, 'UuidCreateSequential') else @UuidCreateFunc := GetProcAddress(Handle, 'UuidCreate'); hr := UuidCreateFunc(m_TGUID); if failed(hr) then RaiseLastWin32Error; ShowMessage(GUIDToString(m_TGUID)); end; |