Calling a DLL generated by MatLab from VC

2 ビュー (過去 30 日間)
iar
iar 2012 年 7 月 26 日
Matlab version is 2009b, and VC version is 2008,the program is calling a DLL generated by the Matlab function normrnd.m to obtain 100 random numbers.
mxArray *norm_out;
mxArray *norm_in[4];
double r[100];
int main()
{
if ( !mclInitializeApplication(NULL,0) )
{
fprintf(stderr, "Could not initialize the application.\n" );
printf("Hello\n");
exit(1);
}
if (!libpkgInitialize())
{
fprintf(stderr, "Could not initialize the library.\n" );
exit(1);
}
norm_in[0] = mxCreateScalarDouble(0.0);
norm_in[1] = mxCreateScalarDouble(1.0);
norm_in[2] = mxCreateScalarDouble(1);
norm_in[3] = mxCreateScalarDouble(100);
norm_out = mxCreateDoubleMatrix(1,100,mxREAL);
mlxNormrnd(1,norm_out,4,norm_in);
memcpy(r,norm_out,100*sizeof(double))
However, the outputs of array r are all zeros. What's the problem?

回答 (1 件)

Titus Edelhofer
Titus Edelhofer 2012 年 7 月 26 日
編集済み: Titus Edelhofer 2012 年 7 月 26 日
Hi,
it's the last memcpy that's wrong: you should not use the datastructure norm_out, but the data of norm_out, i.e.,
memcpy(r,mxGetPr(norm_out),100*sizeof(double))
Alternative: at the top write
double *r = null;
and instead of a memcpy just do
r = mxGetPr(norm_out);
Titus
EDIT: changed mxGetPr call.
  5 件のコメント
Titus Edelhofer
Titus Edelhofer 2012 年 7 月 26 日
Hi,
of course, the declaration of r as double* or double r[100] is the same.
Nnow I see another mistake: don't initialize norm_out, i.e., replace the line
norm_out = mxCreateDoubleMatrix(...);
by
norm_out = null;
Titus
iar
iar 2012 年 7 月 29 日
The problem is solved when I modify the function: mlxNormrnd(1,norm_out,4,norm_in); into mlxNormrnd(1,&norm_out,4,norm_in);
Thanks for your attention.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeC Shared Library Integration についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by