On Sun, 23 Jul 2017, Martok via Lazarus wrote:

Am 23.07.2017 um 14:24 schrieb Michael Van Canneyt via Lazarus:
The pointer-ness of REFIID is an artefact of the C-ABI. It is not meant to mean
'pass a pointer to a GUID-struct', but 'pass a GUID using byref'. We have
constref for that.

See the link to the Windows MSDN.
Yes, so?

Well, if they declare it as a pointer, why should I not do the same :) ?


REFIID is also the type of the first argument of QueryInterface.
<https://msdn.microsoft.com/en-us/library/windows/desktop/ms682521%28v=vs.85%29.aspx>

I know.


   { IUnknown }
   function QueryInterface({$IFDEF
FPC_HAS_CONSTREF}constref{$ELSE}const{$ENDIF} IID: TGUID; out Obj): Hresult;
virtual; {$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};

That is a historical monstrosity :)


But I see already it has been translated differently in every unit (mostly
because MS made it uniform only after the headers were translated), so might as
well use the new one to keep things interesting. Carry on.

I agree the matter is a bit dubious :/

But, before doing anything, I looked around. Saw some C# and VB import statements. Noticed even in Delphi it's not 100% clear (see winrt* units), and finally decided to do it like this to make people aware of the fact that if they used a refiid argument in the past, it can hardly have worked.
The current definition makes it quite clear that it is in fact a pointer to a 
GUID.

Michael.
--
_______________________________________________
Lazarus mailing list
[email protected]
https://lists.lazarus-ide.org/listinfo/lazarus

Reply via email to