mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-13 06:31:36 +02:00
Also prevent SyncObjs.THandleObject.WaitForMultiple from unconditionally linking to ole32.dll.
This commit is contained in:
parent
ba15672a44
commit
62bc640306
@ -151,8 +151,6 @@ implementation
|
||||
|
||||
{$ifdef MSWindows}
|
||||
uses Windows;
|
||||
|
||||
function CoWaitForMultipleHandles(dwFlags, dwTimeout: DWORD; cHandles: ULONG; pHandles: PWOHandleArray; out lpdwindex: DWORD): HRESULT; stdcall; external 'ole32.dll' name 'CoWaitForMultipleHandles';
|
||||
{$endif}
|
||||
|
||||
|
||||
|
@ -77,6 +77,12 @@ procedure OleStrToStrVar(source : PWideChar;var dest : AnsiString);inline;
|
||||
function StringToOleStr(const source : ansistring) : PWideChar;inline;
|
||||
function StringToOleStr(const source : UnicodeString) : PWideChar;inline;
|
||||
|
||||
{ To reuse the delayed loading of CoWaitForMultipleHandles in SyncObjs... }
|
||||
type
|
||||
PWOHandleArray = ^TWOHandleArray;
|
||||
TWOHandleArray = array[0 .. 63] of THandle;
|
||||
function CoWaitForMultipleHandles(dwFlags, dwTimeout: DWORD; cHandles: uint32; pHandles: PWOHandleArray; out lpdwindex: DWORD): HRESULT; inline;
|
||||
|
||||
type
|
||||
TStartupInfo = record
|
||||
cb : DWord;
|
||||
|
@ -541,15 +541,11 @@ begin
|
||||
SetEvent(THandle(state));
|
||||
end;
|
||||
|
||||
|
||||
type
|
||||
PWOHandleArray = ^THandle;
|
||||
|
||||
function FirstCoWaitForMultipleHandles(dwFlags, dwTimeout: DWORD; cHandles: uint32; pHandles: PWOHandleArray; out lpdwindex: DWORD): HRESULT; stdcall; forward;
|
||||
|
||||
var
|
||||
Ole32Dll: THandle = 0; { Unloaded at win32 & win64 system_exit. }
|
||||
CoWaitForMultipleHandles: function(dwFlags, dwTimeout: DWORD; cHandles: uint32; pHandles: PWOHandleArray; out lpdwindex: DWORD): HRESULT; stdcall;
|
||||
CoWaitForMultipleHandlesImpl: function(dwFlags, dwTimeout: DWORD; cHandles: uint32; pHandles: PWOHandleArray; out lpdwindex: DWORD): HRESULT; stdcall;
|
||||
= @FirstCoWaitForMultipleHandles;
|
||||
|
||||
function FirstCoWaitForMultipleHandles(dwFlags, dwTimeout: DWORD; cHandles: uint32; pHandles: PWOHandleArray; out lpdwindex: DWORD): HRESULT; stdcall;
|
||||
@ -562,8 +558,13 @@ begin
|
||||
if InterlockedCompareExchange(Pointer(Ole32Dll), Pointer(LocalOle32Dll), nil) <> nil then
|
||||
WinFreeLibrary(LocalOle32Dll);
|
||||
end;
|
||||
CodePointer(CoWaitForMultipleHandles) := WinGetProcAddress(Ole32Dll, 'CoWaitForMultipleHandles');
|
||||
Result := CoWaitForMultipleHandles(dwFlags, dwTimeout, cHandles, pHandles, lpdwindex);
|
||||
CodePointer(CoWaitForMultipleHandlesImpl) := WinGetProcAddress(Ole32Dll, 'CoWaitForMultipleHandles');
|
||||
Result := CoWaitForMultipleHandlesImpl(dwFlags, dwTimeout, cHandles, pHandles, lpdwindex);
|
||||
end;
|
||||
|
||||
function CoWaitForMultipleHandles(dwFlags, dwTimeout: DWORD; cHandles: uint32; pHandles: PWOHandleArray; out lpdwindex: DWORD): HRESULT;
|
||||
begin
|
||||
Result := CoWaitForMultipleHandlesImpl(dwFlags, dwTimeout, cHandles, pHandles, lpdwindex);
|
||||
end;
|
||||
|
||||
function intbasiceventWaitFor(Timeout : Cardinal;state:peventstate;UseCOMWait: Boolean = False) : longint;
|
||||
|
Loading…
Reference in New Issue
Block a user