coder.ceval
Appeler une fonction C/C++ à partir du code généré
Syntaxe
Description
out = coder.ceval( appelle la fonction C/C++ spécifiée dans functionName,arg1,...,argN)functionName à partir du code généré. Vous pouvez passer un ou plusieurs arguments en entrée dans l’appel de la fonction C/C++. La fonction C/C++ appelée peut renvoyer une seule sortie scalaire. Par exemple, pour appeler la fonction C standard isalnum avec myChar en entrée et isNum en sortie, utilisez isnum = coder.ceval("isalnum",myChar).
Comme le générateur de code ne connaît pas le type de la sortie renvoyée par la fonction C/C++ au moment de la génération du code, vous devez spécifier le type de out (par exemple en lui affectant une valeur fictive) avant l’appel de coder.ceval. Vous pouvez passer les variables devant stocker une sortie non scalaire à la fonction C/C++ appelée sous forme de référence avec coder.ref (MATLAB Coder) ou coder.wref (MATLAB Coder).
Pour appeler des fonctions C/C++ standard, vous devez spécifier le fichier d’en-tête avec coder.cinclude (MATLAB Coder) ou l’argument "-headerfile" de coder.ceval. Pour appeler des fonctions C/C++ personnalisées, vous devez non seulement spécifier le fichier d’en-tête mais aussi le fichier source externe ou la bibliothèque avec coder.updateBuildInfo (MATLAB Coder).
La fonction coder.ceval ne peut être utilisée que dans le code généré. Les appels de coder.ceval exécutés dans MATLAB® produisent une erreur. Pour déterminer si une fonction MATLAB s’exécute dans MATLAB, utilisez coder.target (MATLAB Coder).
out = coder.ceval( appelle la fonction C/C++ spécifiée dans options,functionName,arg1,...,argN)functionName à partir du code généré avec les options spécifiées dans l’argument options. Par exemple, utilisez "-headerfile" pour spécifier un fichier d’en-tête C/C++ et "-global" pour indiquer que la fonction C/C++ appelée utilise des variables globales.
Exemples
Arguments d'entrée
Limitations
Vous ne pouvez pas utiliser
coder.cevalavec des fonctions déclarées comme extrinsèques aveccoder.extrinsic(MATLAB Coder).Si une propriété a une méthode get ou set ou des validateurs, ou bien si c’est une propriété System object™ avec un attribut qui restreint ou modifie sa valeur, vous ne pouvez pas la passer par référence à une fonction externe. Consultez la rubrique Passing by Reference Not Supported for Some Properties.
Les matrices de taille variable en tant que paramètres de point d’entrée ne sont pas supportées pour la génération de code de type row-major.
Vous ne pouvez pas utiliser
coder.cevalpour modifier la taille d’un tableau initialisé dans votre code MATLAB.
Conseils
Pour utiliser
coder.cevalpour appeler une fonction C/C++ qui accepte ou renvoie des types de variables qui n’existent pas dans le code MATLAB, par exemple des pointeurs, des typesFILEpour les E/S fichiers et des macros C/C++, utilisez la fonctioncoder.opaque.Le code externe appelé avec
coder.cevalet le code généré s’exécutent dans le même processus et partagent la mémoire. Si le code externe écrit par erreur dans la mémoire qui contient les structures de données utilisées par le code généré, un comportement inattendu ou une panne peut survenir. Par exemple, si le code externe tente d’écrire des données dans un tableau après son point de fin, le code généré peut avoir un comportement inattendu ou cesser de fonctionner.MATLAB utilise l’encodage système UTF-8 sur la plateforme Windows®. Par conséquent, les appels système effectués à partir d’une fonction MEX générée acceptent et renvoient des chaînes de caractères à encodage UTF-8. En revanche, le code généré par MATLAB Coder™ encode les données texte avec l’encodage spécifié par les paramètres régionaux Windows. Si votre fonction de point d’entrée MATLAB utilise
coder.ceval(MATLAB Coder) pour appeler une fonction C/C++ externe qui suppose un encodage système différent, la fonction MEX générée risque donc de produire du texte brouillé. Si cela se produit, vous devez mettre à jour la fonction C/C++ externe.Pour passer des vecteurs de caractères MATLAB aux fonctions C/C++ appelées avec
coder.ceval, vous devez terminer chaque vecteur de manière explicite avec un caractère nul (0). Pour plus d’informations, consultez Generate C/C++ Strings from MATLAB Strings and Character Row Vectors (MATLAB Coder).
Capacités étendues
Historique des versions
Introduit dans R2011aVoir aussi
coder.ref | coder.rref | coder.wref | coder.target | coder.extrinsic | coder.opaque | coder.updateBuildInfo