dlsym
Charge un symbole C/Fortran depuis une bibliothèque dynamique
📝 Syntaxe
f = dlsym(lib, symbol_name, return_type, params_types)
📥 Argument d'entrée
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.
📤 Argument de sortie
f - a dlsym handle.
📄 Description
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).
💡 Exemples
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);
Call C getpid function
run([modulepath('dynamic_link'), '/examples/call_c.m']);
Call fortran DASUM (blas) function
run([modulepath('dynamic_link'), '/examples/call_fortran.m']);🔗 Voir aussi
dlcall, C/Nelson equivalent data types.
🕔 Historique
1.0.0
version initiale
Last updated
Was this helpful?