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
WebLaz corrections
by
edgarrod71
[
Today
at 10:54:41 pm]
An ASCII logo for Pascal ...
by
domasz
[
Today
at 10:53:50 pm]
printing stuff
by
wp
[
Today
at 10:35:51 pm]
Flickering with TCustomCo...
by
deadbeef
[
Today
at 09:46:03 pm]
How to have a generic enu...
by
CCRDude
[
Today
at 08:30:00 pm]
TGroupBox WMPaint ...
by
Espectr0
[
Today
at 06:52:13 pm]
[SOLVED] Timer
by
Pe3s
[
Today
at 06:30:34 pm]
Use of FreePascal package...
by
Thaddy
[
Today
at 06:05:51 pm]
Dark Theme in my program?
by
d7_2_laz
[
Today
at 05:52:40 pm]
IBTable - user defined se...
by
korba812
[
Today
at 04:57:30 pm]
« previous
next »
Print
Pages: [
1
]
Author
Topic: Identifier not found (Read 432 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: 4784
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: 4117
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: 12898
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
Who is responsable for that!! The caller or the callee.. Out! ya'll, NOW. In UTC time, please, so maybe Yesterday or tomorrow.
howardpc
Hero Member
Posts: 4117
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