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
Initialization of array o...
by
freemind001
[
Today
at 09:13:37 pm]
Find text in memo gives m...
by
howardpc
[
Today
at 09:04:00 pm]
centered text in progress...
by
KodeZwerg
[
Today
at 08:43:18 pm]
Any example on how to get...
by
Bitbeisser
[
Today
at 08:40:34 pm]
Freeing at destructor TLa...
by
lagprogramming
[
Today
at 08:19:39 pm]
Get notified when monitor...
by
artem101
[
Today
at 07:53:11 pm]
Introducción al pascal mo...
by
Ñuño_Martínez
[
Today
at 07:01:33 pm]
Examples of third-party p...
by
JuhaManninen
[
Today
at 06:42:04 pm]
TMapViewer and Overlay Ti...
by
wp
[
Today
at 06:24:02 pm]
Compilation error with CP...
by
explainedd
[
Today
at 06:10:18 pm]
« previous
next »
Print
Pages: [
1
]
Author
Topic: Identifier not found (Read 433 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: 4121
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: 12933
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
In memory of Gordon Moore (January 3, 1929 – March 24, 2023) Just double the heaven every two years from now.
howardpc
Hero Member
Posts: 4121
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