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
Anyone know how to change...
by
Josh
[
Today
at 04:38:55 pm]
How to save greek letters...
by
YiannisKam
[
Today
at 04:26:09 pm]
[Function References ] no...
by
PascalDragon
[
Today
at 04:23:12 pm]
fpc 3.3.1 or lazarus 2.3 ...
by
PascalDragon
[
Today
at 04:20:14 pm]
Lazarus visual components
by
Onur2x
[
Today
at 04:09:52 pm]
Control inside control...
by
Espectr0
[
Today
at 03:55:05 pm]
SQL - looks easy but I ca...
by
Thaddy
[
Today
at 03:27:34 pm]
Yet another FPC/embedded ...
by
DavidL
[
Today
at 03:06:34 pm]
InterProcessCommunication...
by
440bx
[
Today
at 02:46:07 pm]
Habari STOMP Clients 202...
by
mjustin
[
Today
at 02:34:11 pm]
« previous
next »
Print
Pages: [
1
]
Author
Topic: Identifier not found (Read 436 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: 12948
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