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
May be useful to somebody
by
Handoko
[
Today
at 07:35:48 am]
How can I draw a rectangl...
by
Handoko
[
Today
at 07:30:55 am]
Draw a line in the Scroll...
by
Handoko
[
Today
at 07:27:54 am]
Offical launch of the 1 B...
by
Handoko
[
Today
at 06:05:11 am]
Debugger crashes with App...
by
trev
[
Today
at 06:00:08 am]
Copyrights Q
by
domasz
[
Today
at 04:56:59 am]
web development using pas...
by
Nate897
[
Today
at 02:04:05 am]
questionable function def...
by
440bx
[
Today
at 01:35:28 am]
Why isn't TTIRadioGroup's...
by
jamie
[
Today
at 12:13:45 am]
Generics - correct syntax
by
jamie
[
Today
at 12:11:50 am]
Same project and two Pcs
by
caiov1n1c1us
[
Today
at 12:04:00 am]
v3.99 code completion que...
by
440bx
[April 22, 2024, 11:08:26 pm]
add new targets to make
by
marcov
[April 22, 2024, 09:32:20 pm]
[SOLVED]RichMemo StringRe...
by
KodeZwerg
[April 22, 2024, 08:44:40 pm]
[SOLVED] LAMW/Linux - Ins...
by
Alcatiz
[April 22, 2024, 08:04:06 pm]
[SOLVED] TimeStampToMSecs...
by
korba812
[April 22, 2024, 06:23:33 pm]
Quirky windows
by
ASerge
[April 22, 2024, 06:23:20 pm]
Access violation when re-...
by
cdbc
[April 22, 2024, 05:39:59 pm]
trunk compiler bug for mi...
by
nickysn
[April 22, 2024, 04:05:11 pm]
FPDebug: Evaluate/Modify ...
by
bpranoto
[April 22, 2024, 03:14:12 pm]
Your best UI design - con...
by
lainz
[April 22, 2024, 02:28:00 pm]
Access violation when ope...
by
Чебурашка
[April 22, 2024, 02:07:58 pm]
Unlocking Files
by
KodeZwerg
[April 22, 2024, 12:39:53 pm]
[SOLVED] what is function...
by
Martin_fr
[April 22, 2024, 12:14:59 pm]
[SOLVED] how to build the...
by
Laksen
[April 22, 2024, 10:45:18 am]
« previous
next »
Print
Pages: [
1
]
Author
Topic: Identifier not found (Read 648 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: 14377
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