[fpc-devel] procedure Types

Michael Van Canneyt michael at freepascal.org
Mon Mar 13 11:17:22 CET 2006



On Mon, 13 Mar 2006, Amir Aavani wrote:

>
> Any idea to call:
> BeginThread (@MyObject.F1, Pointer (S))

You can't do this. MyObject.F1 is a method, not a procedure.

You should do something like:

Function MyThreadProc(P : Pointer) : Integer;

begin
   TMyObject(P).F1;
end;

and call

BeginThread (@MyThreadProc,(MyObject))

(don't remember the exact form of the thread function.)

Or better yet, use TThread.

>
> Michael Van Canneyt wrote:
>
>> On Sat, 4 Mar 2006, Amir Aavani wrote:
>>
>> 
>>> I have problem with procedure Types.
>>> Look at the following code:
>>> 
>>> TProcedure= procedure (S: String);
>>> TTest= class
>>> MyF: TProcedure;
>>> procedure F1 (S: String);
>>> procedure F2 (S: String);
>>> ....
>>> ...
>>> end;
>>> 
>>> TTest.constructor ;
>>> begin
>>> MyF:= @F1;
>>> end;
>>> 
>>> it says it can't cast "Procedure (S: String); Object" to TProcedure. The
>>> problem is clear but I don't know
>>> (can't find) any solution to define TProcedure as a procedure of a class 
>>> which
>>> accepts one argument.
>>> 
>> 
>> Try the following (note the 'of object' in the declaration):
>> 
>> Type
>>  TMyStringProc = procedure (S : String) of object;
>> 
>> and then
>> x
>>  MyF : TMyStringProc;
>> 
>> This is documented.
>> 
>> Michael.
>> _______________________________________________
>> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
>> http://lists.freepascal.org/mailman/listinfo/fpc-devel
>> 
>
>
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel
>



More information about the fpc-devel mailing list