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

On 2012-04-06 14:39:10 +0200, [email protected] 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.
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to