how can set values to a const mxArray ?

3 vues (au cours des 30 derniers jours)
omid jab
omid jab le 6 Mai 2013
Hi all, Suppose defined a const mxArray *ptr[2]. I wanna set *ptr[0] to a string such as 'mystr', and set *ptr[1] to a int varible such as 10. how can I do it? for example help me to modify this code:
const mxArray *prhs[2]; char a = 'mystr'; prhs[0] = a; prhs[1] = 10;

Réponse acceptée

José-Luis
José-Luis le 6 Mai 2013
Modifié(e) : José-Luis le 6 Mai 2013
Looks like you are talking about C/C++ code. If that is the case, I am confused. How could:
char a = 'mystr'
ever work? That should not work for one of two reasons: either a should be a pointer to a character array or mystr a single character.
That being said, there are some other issues with your code. You declare prhs to be a pointer to a const mxArray. Then you try to assign values to prh, something that you have never declared. Finally you are trying to assign a character and a numeric value to prh, which is a pointer to an mxArray. That's a no-no.
Anyway, knowing what errors you get and what you are actually trying to do would greatly facilitate the task of those trying to help you.
  3 commentaires
José-Luis
José-Luis le 6 Mai 2013
Modifié(e) : José-Luis le 6 Mai 2013
You could use functions from the Matlab C++/Fortran API. Please look here and examples therein. For what you want to do, you should look in particular at:
doc mxCreateString
doc mxCreateDoubleScalar
I will not give you a working example because that would be doing the work for you, and this sounds a lot like homework. I, and others, will be more than happy to help you if you run into specific problems. For such a simple application however, you can pretty much copy/paste from some of the examples provided by the Mathworks.
omid jab
omid jab le 6 Mai 2013
thanks. these examples are very good.

Connectez-vous pour commenter.

Plus de réponses (3)

Jan
Jan le 6 Mai 2013
Modifié(e) : Jan le 6 Mai 2013
mxArray *prhs[2] is a field of pointers to mxArrays. The elements must be pointers to mxArrays then, not a pointer to a string or even an integer value directly.
Even char a='mystr' will fail, because a must be a pointer to a char, when it should carry a string in C.
I assumed there is a confusion with the names prhs and prh.
These are such fundamental problems concerning C that I do not think, that a solution will really help. You have to understand the bascic of C at first, befaore you can use it securely. And afterwards you can include the functionality of Matlab arrays. Read the C-Mex examples shipped with Matlab carefully to learn more details.
  4 commentaires
James Tursa
James Tursa le 6 Mai 2013
Modifié(e) : James Tursa le 6 Mai 2013
@omid jab: Here is the code. However, I am of the same opinion as Jan that these two lines may solve your stated problem in this post, but it is likely that they in and of themselves will not solve your overall problem, and that you likely need to learn C and go though the mex examples in the doc to know how to use these lines.
prhs[0] = mxCreateString("mystr");
prhs[1] = mxCreateDoubleScalar(10);
omid jab
omid jab le 6 Mai 2013
thanks, I have started learning C.

Connectez-vous pour commenter.


Azzi Abdelmalek
Azzi Abdelmalek le 6 Mai 2013
Modifié(e) : Azzi Abdelmalek le 6 Mai 2013
prh{1}='mystr' % Matlab does not allow 0 as index (it must be logical or positive integer)
prh{2}=10
Look at cell array
  2 commentaires
omid jab
omid jab le 6 Mai 2013
That is a C code. for more information google "Mex-file".
Jan
Jan le 6 Mai 2013
Modifié(e) : Jan le 6 Mai 2013
@omid jab: On one hand it might be obvious, that the shown code should be C (but it is only partially). On the other hand it is a good practice to mention in a Matlab forum explicitly, when you ask a question about another language.

Connectez-vous pour commenter.


omid jab
omid jab le 6 Mai 2013
@ José-Luis, Azzi Abdelmalek, and Jan Simon, thaks for your great guidances.

Catégories

En savoir plus sur Write C Functions Callable from MATLAB (MEX Files) dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by