[fpc-pascal] Mangle name in fpc-FreeBSD ?
Ewald
ewald at yellowcouch.org
Sat Mar 19 21:44:06 CET 2016
On 03/19/2016 08:29 PM, fredvs wrote:
>> dlopen, dlsym and dlerror are *functions*, not console commands. Well, I
>> never tried the latter, but it appears they are not on your system ;-)
>> Now, I don't know where exactly these functions are declared (in which
>> unit, that is), but for debugging purposes, just add
>> Function dlopen(filename: PChar; flags: cint): Pointer; cdecl;
>> external;
>> Function dlclose(handle: Pointer): cint; cdecl; external;
>> Function dlsym(handle: Pointer; Name: PChar): Pointer; cdecl; external;
>> Function dlerror: PChar; cdecl; external;
>> Somewhere in your code before you call them.
> Ooops, thanks for answer but now I am completely loosed... ;-(
>
> So those functions can be used in fpc code?
> If so, must a library be loaded to access that functions (and what library)?
> Or are those functions defined in a fpc unit ?
See Marco's answer. So instead of using the above declarations, a simple
`Uses dl;` should do the trick.
As to how to use them, now you do something like this:
X:= GetProcedureAddress(...);
Y:= GetProcedureAddress(...);
Z:= GetProcedureAddress(...);
When one of these fails, a nil pointer is returned. dlerror will give
you more info on what failed where. So, if you know X returns nil for
some-yet-to-be-determined-reason, place the dlerror immediately after that:
X:= GetProcedureAddress(...);
WriteLn(dlerror);
Y:= GetProcedureAddress(...);
Z:= GetProcedureAddress(...);
Of course, you could choose to do something like this if you do not know
which call exactly fails:
X:= GetProcedureAddress(...);
If X = nil Then
WriteLn('Z: ', dlerror);
Y:= GetProcedureAddress(...);
If Y = nil Then
WriteLn('Y: ', dlerror);
Z:= GetProcedureAddress(...);
If Z = nil Then
WriteLn('Z: ', dlerror);
It is really nothing more than a function call, quite similar to fpGetErrNo.
> I am in the dark.
Being in the dark is positive, as one can always turn on the lights :-)
--
Ewald
More information about the fpc-pascal
mailing list