On Sat, 10 Oct 2015, Ondrej Pokorny wrote:
On 10.10.2015 12:43, Michael Van Canneyt wrote:
On Sat, 10 Oct 2015, Ondrej Pokorny wrote:
On 10.10.2015 12:35, Michael Van Canneyt wrote:
Hi,
Mainly for Mattias, I suppose:
The SetString routine in the system unit has become a compiler procedure
in 3.0:
{$ifdef FPC_HAS_CPSTRING}
Procedure fpc_setstring_ansistr_pansichar(out S : RawByteString; Buf :
PAnsiChar; Len : SizeInt; cp: TSystemCodePage); rtlproc; compilerproc;
{$else}
Procedure SetString(out S : AnsiString; Buf : PAnsiChar; Len : SizeInt);
{$endif}
begin
SetLength(S,Len);
{$ifdef FPC_HAS_CPSTRING}
SetCodePage(S,cp,false);
{$endif}
If (Buf<>Nil) then
fpc_pchar_ansistr_intern_charmove(Buf,0,S,0,Len);
end;
This means the codetools are no longer able to find the SetString
declaration.
Is there any way to fix this kind of things (i.e. find compiler procs) in
the code tools ?
Yes, see TIdentCompletionTool.GatherPredefinedIdentifiers() in
IdentCompletionTool.pas
Add this line there:
AddCompilerProcedure('SetString','out
S:RawByteString;Buf:PAnsiChar;Len:SizeInt;cp:TSystemCodePage');
Oh cool :-)
I didn't know this existed, I keep underestimating the Lazarus IDE ;)
How to detect the compiler version ? Because it is only for 3.0+, I
suppose.
I think it is save to assume that Lazarus was compiled with the same FPC
version that is also used for the sources in editor. Therefore you can use
the same compiler directive:
This is definitely not so :-(
I compile lazarus with 2.6.4, but work with compiler set to 3.0 or even jvm.
That is how I bumped into the problem to begin with... :-)
Michael.
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus