2011-07-25 1 views
2

supposer qu'un programme C a une structure instancié comme suit:Comment peut-on passer d'une structure à partir du code C au code Matlab

b.param1 = 20; 
b.parm2 = 42; 
b.param3 = 30; 

La question est, qu'est-ce que nous devons faire ou doivent être en mesure à écrire de Matlab

>> b = [bInC.param1; bInC.param2; bInC.param3]; 

où les points BINC à la mémoire allouée par le programme C mentionné ci-dessus

+0

Comment avez-vous obtenu le pointeur 'bInC' dans MATLAB? Je suis intéressé. – Stan

+0

@stan c'est mon queston aussi. Je voudrais obtenir un pointeur comme bInC qui pointe vers la mémoire de la structure b en C. C'est juste un exemple pour clarifier ma question – javaMan

+0

Si vous construisez le programme C dans un fichier exécutif, et que vous voulez obtenir 'bInC.param1 'ou quelque chose comme ça quand le fichier exécutif est en cours d'exécution ... c'est impossible. Ce que vous pouvez probablement faire est de partager le contenu dans un fichier. – Stan

Répondre

7

Vous avez plusieurs options, selon votre situation.

1) Si votre code C est structuré de manière à pouvoir être appelé depuis matlab, vous pouvez compiler votre code C en tant que fichier mex. Vous appelez alors votre fonction C depuis matlab et renvoyez votre résultat. Pour retourner votre structure, vous devez créer un tableau matlab dans votre code C et y copier les paramètres de la structure. L'interface pour cela est le mxArray. Ce n'est pas le processus le plus pratique, mais cela fonctionne bien.

fichiers et mxArray: Mex http://www.mathworks.com/help/techdoc/matlab_external/f29502.html

2) Utilisez le moteur Matlab pour charger vos valeurs dans Matlab sans avoir à compiler votre code dans un MEX. Le moteur vous permettra d'exécuter des commandes matlab à partir de votre programme C. Vous pouvez également charger des variables dans l'espace de travail. Vous devrez toujours créer un mxArray contenant les valeurs que vous voulez copier. Vous pouvez ensuite utiliser la fonction engPutVariable pour copier le mxArray dans votre espace de travail matlab. Notez que le moteur conserve son propre espace de travail, il ne copie pas automatiquement la variable dans l'espace de travail de votre session matlab actuelle par défaut. Il existe des commandes pour déplacer des variables entre les espaces de travail, mais je n'ai pas étudié cela. J'ai trouvé plus rapide de simplement enregistrer les variables dans un fichier mat et de le charger dans l'espace de travail principal, mais ce n'est pas idéal si vous avez besoin d'une approche automatisée.

moteur Matlab: http://www.mathworks.com/help/techdoc/matlab_external/f29148.html

1

Vous pouvez utiliser le MATLAB Engine pour exécuter des fonctions MATLAB® à partir du code C.

+1

ou l'inverse, vous pouvez utiliser l'API [MEX] (http://www.mathworks.com/help/techdoc/matlab_external/f7667.html) pour interfacer MATLAB avec C/C++ – Amro

0

Deux façons d'appeler des fonctions C (et donc créer des pointeurs vers des structures C) de Matlab.

Build a DLL et d'appeler une bibliothèque partagée.

Build a MEX file.

La quantité de surcharge pour un fichier MEX est significativement supérieure à DLL, je recommande fortement l'approche basée sur DLL.

Questions connexes