f = dlsym(lib, symbol_name, return_type, params_types)
| Paramètre | Description |
|---|---|
| lib | a dllib handle. |
| symbolname | a string: symbol to load. |
| return_type | a string: return type of the C/Fortran function. |
| params_types | a cell of strings: arguments using a special syntax with differents data types. |
| Paramètre | Description |
|---|---|
| f | a dlsym handle. |
dlsym récupère l'adresse d'une fonction exportée en tant que handle dlsym.
Si le symbolname n'est pas trouvé, Nelson tente de trouver des variantes du nom selon ces règles (dans cet ordre) :
_symbolname
symbolname
symbolname_
_symbolname_
_SYMBOLNAME
SYMBOLNAME
SYMBOLNAME_
_SYMBOLNAME_
Le nom de symbole utilisé est disponible dans le champ prototype du handle retourné.
Si plusieurs noms de symboles sont trouvés, une erreur est levée avec les noms possibles.
Attention : si les types sont mal définis, l'appel d'une fonction étrangère peut provoquer des comportements imprévus (plantage).
lib = dlopen(modulepath('dynamic_link', 'builtin'));
V = double([1 2;3 4]);
% C prototype:
% int dynlibTestMultiplyDoubleArrayWithReturn(double *x, int size)
f = dlsym(lib, 'dynlibTestMultiplyDoubleArrayWithReturn', 'int32', {'doublePtr', 'int32'});
[r1, r2] = dlcall(f, V, int32(numel(V)))
delete(f);
delete(lib);
run([modulepath('dynamic_link'), '/examples/call_c.m']);
run([modulepath('dynamic_link'), '/examples/call_fortran.m']);
| Version | Description |
|---|---|
| 1.0.0 | version initiale |