[Lazarus] Callback and Threads problem

michael.vancanneyt at wisa.be michael.vancanneyt at wisa.be
Fri Apr 6 14:53:13 CEST 2012



On Fri, 6 Apr 2012, Leonardo M. Ramé wrote:

> On 2012-04-06 14:39:10 +0200, michael.vancanneyt at wisa.be wrote:
>>
>>
>> On Fri, 6 Apr 2012, Leonardo M. Ramé wrote:
>>
>>> I have a similar problem to this:
>>>
>>> http://www.lazarus.freepascal.org/index.php?topic=10571.0
>>>
>>> My main program launches a thread, that loads a shared library, then
>>> execute a function who receives as a parameter a pointer to a callback
>>> function and an instance of the caller, as this:
>>>
>>> procedure TMythread.execute;
>>> begin
>>> ...
>>> // external function
>>> runcode(@MyCallBack, @Self);
>>> ...
>>> end;
>>>
>>> procedure MyCallback(const Result: PAnsiChar; const ACaller: pointer);
>>> cdecl;
>>> var
>>> lCaller: TMythread;
>>> begin
>>> // the parameter ACaller is used because callbacks can't be of type
>>> // procedure of object.
>>> lCaller := TMyThread(ACaller);
>>> lCaller.TestVar := Result; // <--- Ok.
>>> lCaller.ListOfThings.Add;  // <--- SIGSEGV
>>
>> IMHO the problem is not in threads.
>>
>> You cannot pass objects to libraries or vice versa.
>> The VMTs will differ.
>>
>> Michael.
>
> But, I'm passing the object as a pointer that is received as (void *) and
> returned back to the callback as a parameter, the library doesn't touch
> it. Even in this case I can't pass an object?.

Ah. In that case you can, yes.

Is the calling convention correct ?

Michael.


More information about the Lazarus mailing list