mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-13 21:11:23 +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}
|
{$ifdef MSWindows}
|
||||||
uses Windows;
|
uses Windows;
|
||||||
|
|
||||||
function CoWaitForMultipleHandles(dwFlags, dwTimeout: DWORD; cHandles: ULONG; pHandles: PWOHandleArray; out lpdwindex: DWORD): HRESULT; stdcall; external 'ole32.dll' name 'CoWaitForMultipleHandles';
|
|
||||||
{$endif}
|
{$endif}
|
||||||
|
|
||||||
|
|
||||||
|
@ -77,6 +77,12 @@ procedure OleStrToStrVar(source : PWideChar;var dest : AnsiString);inline;
|
|||||||
function StringToOleStr(const source : ansistring) : PWideChar;inline;
|
function StringToOleStr(const source : ansistring) : PWideChar;inline;
|
||||||
function StringToOleStr(const source : UnicodeString) : 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
|
type
|
||||||
TStartupInfo = record
|
TStartupInfo = record
|
||||||
cb : DWord;
|
cb : DWord;
|
||||||
|
@ -541,15 +541,11 @@ begin
|
|||||||
SetEvent(THandle(state));
|
SetEvent(THandle(state));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
type
|
|
||||||
PWOHandleArray = ^THandle;
|
|
||||||
|
|
||||||
function FirstCoWaitForMultipleHandles(dwFlags, dwTimeout: DWORD; cHandles: uint32; pHandles: PWOHandleArray; out lpdwindex: DWORD): HRESULT; stdcall; forward;
|
function FirstCoWaitForMultipleHandles(dwFlags, dwTimeout: DWORD; cHandles: uint32; pHandles: PWOHandleArray; out lpdwindex: DWORD): HRESULT; stdcall; forward;
|
||||||
|
|
||||||
var
|
var
|
||||||
Ole32Dll: THandle = 0; { Unloaded at win32 & win64 system_exit. }
|
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;
|
= @FirstCoWaitForMultipleHandles;
|
||||||
|
|
||||||
function FirstCoWaitForMultipleHandles(dwFlags, dwTimeout: DWORD; cHandles: uint32; pHandles: PWOHandleArray; out lpdwindex: DWORD): HRESULT; stdcall;
|
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
|
if InterlockedCompareExchange(Pointer(Ole32Dll), Pointer(LocalOle32Dll), nil) <> nil then
|
||||||
WinFreeLibrary(LocalOle32Dll);
|
WinFreeLibrary(LocalOle32Dll);
|
||||||
end;
|
end;
|
||||||
CodePointer(CoWaitForMultipleHandles) := WinGetProcAddress(Ole32Dll, 'CoWaitForMultipleHandles');
|
CodePointer(CoWaitForMultipleHandlesImpl) := WinGetProcAddress(Ole32Dll, 'CoWaitForMultipleHandles');
|
||||||
Result := CoWaitForMultipleHandles(dwFlags, dwTimeout, cHandles, pHandles, lpdwindex);
|
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;
|
end;
|
||||||
|
|
||||||
function intbasiceventWaitFor(Timeout : Cardinal;state:peventstate;UseCOMWait: Boolean = False) : longint;
|
function intbasiceventWaitFor(Timeout : Cardinal;state:peventstate;UseCOMWait: Boolean = False) : longint;
|
||||||
|
Loading…
Reference in New Issue
Block a user