Lazarus
Home
Help
TinyPortal
Search
Login
Register
Lazarus
»
Forum
»
Free Pascal
»
Beginners
(Moderators:
FPK
,
Tomas Hajny
) »
Identifier not found
Free Pascal
Website
Downloads
Wiki
Documentation
Bugtracker
Mailing List
Lazarus
Website
Downloads (Laz+FPC)
Packages (OPM)
FAQ
Wiki
Documentation (RTL/FCL/LCL)
Bugtracker
CCR Bugs
IRC channel
GIT
Mailing List
Other languages
Foundation
Website
Useful Wiki Links
Project Roadmap
Getting the Source
Screenshots
How to use the forum
About donations (wiki)
Bookstore
Computer Math and Games in Pascal
(preview)
Lazarus Handbook
Search
Advanced search
Recent
[Request] Demo Scene Sub ...
by
Gigatron
[
Today
at 06:29:39 pm]
Parameter passing odditie...
by
alpine
[
Today
at 06:16:58 pm]
add new targets to make
by
Key-Real
[
Today
at 06:04:22 pm]
Unlocking Files
by
KodeZwerg
[
Today
at 06:03:08 pm]
[SOLVED] trunk bug for mi...
by
Key-Real
[
Today
at 05:56:32 pm]
Demo Scene Bitmap Font Sc...
by
Gigatron
[
Today
at 05:56:27 pm]
Compile/Convert Delphi pr...
by
Martin_fr
[
Today
at 05:43:11 pm]
Generics - correct syntax
by
Thaddy
[
Today
at 05:40:59 pm]
Lazarus for Windows on aa...
by
msintle
[
Today
at 05:32:42 pm]
InstallAware Using Lazaru...
by
msintle
[
Today
at 05:26:36 pm]
Xcode Command Line Tools ...
by
Joseph
[
Today
at 05:16:39 pm]
Offical launch of the 1 B...
by
Hartmut
[
Today
at 04:49:29 pm]
what to do if my target M...
by
nickysn
[
Today
at 04:16:02 pm]
compiler error in unit
by
paule32
[
Today
at 03:49:50 pm]
how to tweek fpmake to co...
by
Key-Real
[
Today
at 02:33:27 pm]
Can function be used for ...
by
VisualLab
[
Today
at 02:15:30 pm]
Multithreading - synchron...
by
mika
[
Today
at 01:48:51 pm]
A fairly simple sound sol...
by
KodeZwerg
[
Today
at 01:48:26 pm]
May be useful to somebody
by
KodeZwerg
[
Today
at 12:38:22 pm]
match automatic highlight...
by
Чебурашка
[
Today
at 11:35:14 am]
Tchart with dual numbers ...
by
wp
[
Today
at 10:48:18 am]
Debugger crashes with App...
by
Martin_fr
[
Today
at 09:29:46 am]
Copyrights Q
by
BrassGear
[
Today
at 09:13:14 am]
[SOLVED] how to build the...
by
Key-Real
[
Today
at 09:12:33 am]
Quirky windows
by
tetrastes
[
Today
at 08:59:06 am]
« previous
next »
Print
Pages: [
1
]
Author
Topic: Identifier not found (Read 651 times)
jan741
New Member
Posts: 15
Identifier not found
«
on:
December 09, 2022, 05:16:53 pm »
Identifier deproc not found on function-call(see comment in code below). Exactly based on this example.
https://wiki.lazarus.freepascal.org/Asynchronous_Calls
What's going wrong?
Code: Pascal
[Select]
[+]
[-]
unit
Unit1
;
{$mode objfpc}{$H+}
interface
uses
Classes
,
SysUtils
,
Forms
,
Controls
,
Graphics
,
Dialogs
,
StdCtrls
,
dbugintf
,
LazLoggerBase
,
pingsend
;
const
threadcount
=
100
;
stringlen
=
10000
;
type
{ TForm1 }
TForm1
=
class
(
TForm
)
Button1
:
TButton
;
Button2
:
TButton
;
procedure
Button1Click
(
Sender
:
TObject
)
;
procedure
Button2Click
(
Sender
:
TObject
)
;
private
{ private declarations }
procedure
deproc
(
input
:
PtrInt
)
;
public
{ public declarations }
end
;
myrec
=
record
i
:
longint
;
s
:
string
;
end
;
Pmyrec
=
^
myrec
;
var
Form1
:
TForm1
;
finished
:
longint
;
y
:
longint
;
nr
:
integer
;
threadvar
thri
:
ptrint
;
implementation
{$R *.lfm}
{ TForm1 }
function
f
(
p
:
Pointer
)
:
ptrint
;
var
s
:
ansistring
;
thisrec
:
myrec
;
begin
thisrec
:
=
Pmyrec
(
p
)
^
;
Writeln
(
'thread '
,
longint
(
thisrec
.
i
)
,
' started'
)
;
thri
:
=
0
;
while
(
thri<stringlen
)
do
begin
s
:
=
s
+
'1'
;
inc
(
thri
)
;
end
;
Writeln
(
'thread '
,
thisrec
.
i
,
' finished with'
,
thisrec
.
s
)
;
InterLockedIncrement
(
finished
)
;
f
:
=
0
;
nr
:
=
10
;
Application
.
QueueAsyncCall
(
@
deproc
,
nr
)
;
//<--------------------------------------------------------------------------------------- error happening here
end
;
procedure
TForm1
.
Button1Click
(
Sender
:
TObject
)
;
begin
y
:
=
1
;
end
;
procedure
TForm1
.
Button2Click
(
Sender
:
TObject
)
;
var
r
:
array
[
1
..
threadcount
]
of
myrec
;
pr
:
^
myrec
;
x
:
longint
;
begin
finished
:
=
0
;
for
x
:
=
1
to
threadcount
do
begin
r
[
x
]
.
s
:
=
' test '
;
r
[
x
]
.
i
:
=
x
;
BeginThread
(
@
f
,
@
r
[
x
]
)
;
writeln
(
'ready for next'
)
;
end
;
while
finished<threadcount
do
;
end
;
procedure
deproc
(
input
:
PtrInt
)
;
begin
writeln
(
'async called.'
)
;
end
;
end
.
«
Last Edit: December 09, 2022, 05:21:20 pm by jan741
»
Logged
Handoko
Hero Member
Posts: 5158
My goal: build my own game engine using Lazarus
Re: Identifier not found
«
Reply #1 on:
December 09, 2022, 05:51:50 pm »
That
line #97
, should be:
Code: Pascal
[Select]
[+]
[-]
procedure
TForm1
.
deproc
(
input
:
PtrInt
)
;
Logged
howardpc
Hero Member
Posts: 4144
Re: Identifier not found
«
Reply #2 on:
December 09, 2022, 05:53:15 pm »
Try this adaptation:
Code: Pascal
[Select]
[+]
[-]
unit
Unit1
;
{$mode objfpc}{$H+}
{$IFDEF MSWINDOWS} {$apptype console} {$EndIf}
interface
uses
Classes
,
SysUtils
,
Forms
,
Controls
,
Graphics
,
Dialogs
,
StdCtrls
;
const
threadcount
=
100
;
stringlen
=
10000
;
type
TForm1
=
class
(
TForm
)
Button2
:
TButton
;
procedure
Button2Click
(
Sender
:
TObject
)
;
private
procedure
deproc
(
input
:
PtrInt
)
;
end
;
myrec
=
record
i
:
longint
;
s
:
string
;
end
;
Pmyrec
=
^
myrec
;
var
Form1
:
TForm1
;
finished
,
nr
:
LongInt
;
threadvar
thri
:
PtrInt
;
implementation
{$R *.lfm}
function
f
(
p
:
Pointer
)
:
PtrInt
;
var
s
:
AnsiString
=
''
;
thisrec
:
myrec
;
begin
thisrec
:
=
Pmyrec
(
p
)
^
;
Writeln
(
'thread '
,
thisrec
.
i
,
' started'
)
;
thri
:
=
0
;
while
(
thri<stringlen
)
do
begin
s
:
=
s
+
'1'
;
Inc
(
thri
)
;
end
;
Writeln
(
'thread '
,
thisrec
.
i
,
' finished with'
,
thisrec
.
s
)
;
InterLockedIncrement
(
finished
)
;
f
:
=
0
;
nr
:
=
10
;
Application
.
QueueAsyncCall
(
@
Form1
.
deproc
,
nr
)
;
// <--------------- error happening here
end
;
procedure
TForm1
.
Button2Click
(
Sender
:
TObject
)
;
var
r
:
array
[
1
..
threadcount
]
of
myrec
;
pr
:
^
myrec
;
x
:
longint
;
begin
finished
:
=
0
;
for
x
:
=
1
to
threadcount
do
begin
r
[
x
]
.
s
:
=
' test '
;
r
[
x
]
.
i
:
=
x
;
BeginThread
(
@
f
,
@
r
[
x
]
)
;
writeln
(
'ready for next'
)
;
end
;
while
finished<threadcount
do
;
end
;
procedure
TForm1
.
deproc
(
input
:
PtrInt
)
;
begin
WriteLn
(
'async called.'
)
;
end
;
end
.
«
Last Edit: December 09, 2022, 06:44:41 pm by howardpc
»
Logged
Thaddy
Hero Member
Posts: 14380
Sensorship about opinions does not belong here.
Re: Identifier not found
«
Reply #3 on:
December 09, 2022, 06:16:22 pm »
The error may be here:
longint
(thisrec.i). That should be
ptrUint
not ptrInt. Pointers can not be negative and longint does not work above 32 bit.
«
Last Edit: December 09, 2022, 06:18:04 pm by Thaddy
»
Logged
Object Pascal programmers should get rid of their "component fetish" especially with the non-visuals.
howardpc
Hero Member
Posts: 4144
Re: Identifier not found
«
Reply #4 on:
December 09, 2022, 06:46:12 pm »
@Thaddy
Actually the Longint() cast is not needed at all, since the record field is already a longint.
He is not casting a pointer at that point in the code.
I've changed my example accordingly.
Logged
jan741
New Member
Posts: 15
Re: Identifier not found
«
Reply #5 on:
December 10, 2022, 12:00:04 am »
It works now. Thanks.
Logged
Print
Pages: [
1
]
« previous
next »
Lazarus
»
Forum
»
Free Pascal
»
Beginners
(Moderators:
FPK
,
Tomas Hajny
) »
Identifier not found
TinyPortal
© 2005-2018