On Mon, 9 Mar 2015, OBones wrote:
Michael Van Canneyt wrote:
On Mon, 9 Mar 2015, Xiangrong Fang wrote:
Hi all,
I define a procedure like this:
type
TDataHandler = procedure(data: Pointer) of object;
procedure SetHandler(h: TDataHandler); external cdecl;
Now, can I implement SetHandler in a library written in C, then call h in
C?
IMHO Not without separate assembler code for each CPU.
Michael.
How about using TMethod?
procedure DataHandler(DummySelf: Pointer; data: Pointer);
begin
// do what you want to do, DummySelf is always nil.
end;
var
Method: TMethod;
begin
Method.Data := nil;
Method.Code := @DataHandler;
SetHandler(TDataHandler(Method));
end;
You must be sure that self is passed in the correct register.
I am not sure this is the case if you declare it as an extra argument.
It may be so, but compiler people should confirm this.
I don't think you can take it for granted.
Michael.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal