Dňa 20.10.2016 o 17:48 José Mejuto napísal(a):
Show quoted text 22 lines
El 20/10/2016 a las 15:20, LacaK escribió:
> There is:
> if bParamByRef then
> case FD^.lprgelemdescParam[k].paramdesc.wParamFlags and
> (PARAMFLAG_FIN or PARAMFLAG_FOUT) of
> PARAMFLAG_FIN or PARAMFLAG_FOUT:sPar:='var ';
> PARAMFLAG_FOUT:sPar:='out ';
> PARAMFLAG_FIN:sPar:='var '; //constref in safecall? TBD
> end;
> In my case bParamByRef = True, but wParamFlags=0 so no "var" nor "out"
> is added ...
> (as I do no known about type libraries I fear, that any modification
> which fixes my case can cause problems in another cases)
> So I have posted bug report:
>
http://bugs.freepascal.org/view.php?id=30764 may be somebody experienced
> can fix it ...
Hello,
If wParaFlags is 0 then no "var" or "out" must be added (unless bug in
filling wParamFlags with value)
I do not know, but I know, that:
- when I import this type library in Delphi gives in this function "var" (not only in case of WideString but also in case of integer for example) ... so I guess that there must be way how to handle it
- when I manually add in FPC "var" it works as expected (without "var" it gives runtime error about incompatible types)
- in documentation of OCX is function parameter described as "BSTR* Value" for "var WideString" resp. "long* Value" for "var integer"
- in typelib.pas is on line 631 vt=VT_PTR and sl='PWideString' ('P' is deleted on line 635) wParamFlags=0
When I add "else" part:
case FD^.lprgelemdescParam[k].paramdesc.wParamFlags and (PARAMFLAG_FIN or PARAMFLAG_FOUT) of
PARAMFLAG_FIN or PARAMFLAG_FOUT:sPar:='var ';
PARAMFLAG_FOUT:sPar:='out ';
PARAMFLAG_FIN:sPar:='var '; //constref in safecall? TBD
/*added*/ else sPar:='var ';
end;
it works for me.
But I have no idea if it can negative impact other cases ?
Thanks
-Laco.