### Bookstore

 Computer Math and Games in Pascal (preview) Lazarus Handbook

### Author Topic: Address of function in typeless pointer constant  (Read 844 times)

#### TCH

• Full Member
• Posts: 148
##### Address of function in typeless pointer constant
« on: October 14, 2021, 11:00:33 pm »
I have a small program:
Code: Pascal  [Select][+][-]
1. program x;
2.
3. function kecske(a: integer): integer; cdecl;
4. begin
5.         kecske := a + 8;
6. end;
7.
8. var ptr: Pointer = Pointer(@kecske);
9.
10. begin
11. end.
fpc x.pas
Code: [Select]
`x.pas(8,36) Error: Illegal expression`If i change the var to const, the result is identical. How can i store a function's address to a constant or an initialized variable as an untyped pointer?

#### howardpc

• Hero Member
• Posts: 3836
##### Re: Address of function in typeless pointer constant
« Reply #1 on: October 15, 2021, 12:59:02 am »
Code: Pascal  [Select][+][-]
1. program pointerEx;
2.
3. {\$mode objfpc}
4.
5. function kecske(a: integer): integer; cdecl;
6. begin
7.   kecske := a + 8;
8. end;
9.
10. var
11.   pKecske: Pointer = @kecske;
12.
13. begin
14. end.
This compiles OK for me.

#### TCH

• Full Member
• Posts: 148
##### Re: Address of function in typeless pointer constant
« Reply #2 on: October 15, 2021, 10:09:09 am »
Yeah, that worked for me too, but unfortunately it did not worked in my real case. My example program was incomplete. This was more like what i wanted to accomplish:
Code: Pascal  [Select][+][-]
1. program x;
2.
3. type
4.         TProc = procedure; cdecl;
5.         TKecske = function (a: integer): integer; cdecl;
6.         PPointer = ^Pointer;
7.
8. var Func: TProc;
9.
10. function kecske(a: integer): integer; cdecl;
11. begin
12.         kecske := a + 8;
13. end;
14.
15. const
16.         pKecske: Pointer = @kecske;
17.         pFunc: Pointer = @Func;
18.
19. procedure set_it1(src: Pointer; dst: PPointer);
20. begin
21.         dst^ := src;
22. end;
23.
24. begin
25.         set_it1(pKecske, @pFunc);
26.         WriteLn(TKecske(pFunc)(8));
27. end.
But in the meantime, i figured it out, the catch was casting the pointer to ppointer. Thanks for helping.

#### howardpc

• Hero Member
• Posts: 3836
##### Re: Address of function in typeless pointer constant
« Reply #3 on: October 15, 2021, 12:11:18 pm »
I think it is generally better practice to use typed pointers, or if you have to use an untyped pointer cast it to the correct type:

Code: Pascal  [Select][+][-]
1. program pointerEx;
2.
3. {\$mode objfpc}
4.
5. type
6.
7.   TFunc = function(b: Integer): Integer; cdecl;
8.
9. function kecske(a: integer): integer; cdecl;
10. begin
11.   kecske := a + 8;
12. end;
13.
14. var
15.   pKecske: Pointer = @kecske;
16.
17. begin
18.   WriteLn(TFunc(pKecske)(8);