2004. október 13., szerda
Create a (unique) GUID (2)
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;
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése